OK. Thanks for the advice. I tried to use Tiles2 because my user interface is used with Tiles2. If I get a Tile for the email, the email received has the same look&feel as the web pages. And I can re-use JSP/JSTL/OGNL parts.
I'll give FreeMarker a try... just a question... in the code you sent... the "String template" argument is just the file name of the Freemarket content (mail.ftl) file? Thanks, Ignacio Musachy Barroso wrote: > > The thing is that neither JSP nor Tiles are designed for what you want > to do. BTW, FreeMarker is already in your application. > > musachy > > On Thu, Feb 12, 2009 at 2:19 PM, Ignacio de Córdoba <icord...@skios.es> > wrote: >> >> hi again, >> thanks for your reply. I've never used FreeMaker or Velocity. I use >> Tiles2... can you figure out if your solution can be solved with Tiles2. >> I >> wouldn't like to get into those, I'm sure great, technologies only for >> this. >> >> Thanks, >> Ignacio >> >> >> Musachy Barroso wrote: >>> >>> I don't know how to fix it, but i would never use JSP for this. I >>> would suggest you use FreeMarker or Velocity which will be very easy >>> to get working and won't break across different containers/versions. >>> For example, for FreeMarker (which will be in the classpath already), >>> I use this: >>> >>> public static void process(ServletContext context, String template, >>> Map<String, Object> values, Writer writer) throws IOException, >>> TemplateException { >>> Configuration cfg = new Configuration(); >>> cfg.setDirectoryForTemplateLoading(new >>> File(context.getRealPath("/templates"))); >>> cfg.setObjectWrapper(new DefaultObjectWrapper()); >>> >>> BeansWrapper wrapper = BeansWrapper.getDefaultInstance(); >>> TemplateHashModel staticModels = wrapper.getStaticModels(); >>> Template temp = cfg.getTemplate(template); >>> temp.process(values, writer); >>> writer.flush(); >>> } >>> >>> //also JSP has not way to deal with empty spaces and such >>> >>> musachy >>> >>> On Thu, Feb 12, 2009 at 1:49 PM, Ignacio de Córdoba <icord...@skios.es> >>> wrote: >>>> >>>> Hi there, >>>> I had a working solution that was fine for struts1 and doesn't work >>>> with >>>> struts2. >>>> The scenario is evey time the application needs to send a mail from an >>>> action (for example, when a user signs up, the system sends him a >>>> welcome >>>> mail) >>>> >>>> My solution got the JSP the following way: >>>> >>>> public String getResourceAsString(String path) throws >>>> ServletException, >>>> IOException >>>> { >>>> HttpServletRequest request = >>>> org.apache.struts2.ServletActionContext.getRequest(); >>>> HttpServletResponse response = >>>> ServletActionContext.getResponse(); >>>> try >>>> { >>>> ByteArrayOutputStream out = new >>>> ByteArrayOutputStream(); >>>> RequestDispatcher dispatcher = >>>> request.getRequestDispatcher(path); >>>> RedirectingServletResponse dummyResponse = new >>>> RedirectingServletResponse(response, out); >>>> dispatcher.include(request, dummyResponse); >>>> return out.toString(); >>>> } catch (NullPointerException e) >>>> { >>>> return "<p>No such template: " + path + "</p>"; >>>> } >>>> } >>>> >>>> (RedirectingServletResponse class just extends >>>> HttpServletResponseWrapper >>>> and captures output to a ByteArrayOutputStream) >>>> >>>> >>>> The JSP needs a small scriptlet at its end: >>>> <% out.flush(); %> >>>> >>>> Without it, the mail is sent blank as the JSP is not rendered to >>>> HTML/text >>>> as the request has not ended (I use the current thread request because: >>>> 1) I >>>> don't know how to create a brand new request/response 2) This way I can >>>> use >>>> all request parameters, attributes... in the mail sent and so not use >>>> just >>>> plain HTML but real JSP. >>>> >>>> The problem now is that struts2 shows the following exception: >>>> >>>> java.io.IOException: Stream closed >>>> >>>> >>>> org.apache.jasper.runtime.JspWriterImpl.ensureOpen(JspWriterImpl.java:204) >>>> >>>> org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:115) >>>> >>>> org.apache.jasper.runtime.JspWriterImpl.flush(JspWriterImpl.java:173) >>>> >>>> org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:956) >>>> >>>> org.apache.jasper.runtime.PageContextImpl.include(PageContextImpl.java:609) >>>> >>>> org.apache.struts2.dispatcher.ServletDispatcherResult.doExecute(ServletDispatcherResult.java:123) >>>> >>>> org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:186) >>>> >>>> com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:361) >>>> >>>> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:265) >>>> >>>> com.servengine.struts2.InjectEJBInterceptor.intercept(InjectEJBInterceptor.java:89) >>>> >>>> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) >>>> >>>> org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52) >>>> >>>> org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:468) >>>> >>>> org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395) >>>> >>>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) >>>> >>>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206 >>>> >>>> Any ideas on this... or better... any directions on how can I >>>> instanciate >>>> a >>>> "fake" response not based on current struts2 Action ServletResponse >>>> object >>>> (and so flush() or close() will not affect it). >>>> >>>> Thanks, >>>> Ignacio >>>> -- >>>> View this message in context: >>>> http://www.nabble.com/How-to-render-a-JSP-Struts2-action-to-send-it-%28mail%2C-...%29-tp21982445p21982445.html >>>> Sent from the Struts - User mailing list archive at Nabble.com. >>>> >>>> >>>> --------------------------------------------------------------------- >>>> To unsubscribe, e-mail: user-unsubscr...@struts.apache.org >>>> For additional commands, e-mail: user-h...@struts.apache.org >>>> >>>> >>> >>> >>> >>> -- >>> "Hey you! Would you help me to carry the stone?" Pink Floyd >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: user-unsubscr...@struts.apache.org >>> For additional commands, e-mail: user-h...@struts.apache.org >>> >>> >>> >> >> -- >> View this message in context: >> http://www.nabble.com/How-to-render-a-JSP-Struts2-action-to-send-it-%28mail%2C-...%29-tp21982445p21982968.html >> Sent from the Struts - User mailing list archive at Nabble.com. >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: user-unsubscr...@struts.apache.org >> For additional commands, e-mail: user-h...@struts.apache.org >> >> > > > > -- > "Hey you! Would you help me to carry the stone?" Pink Floyd > > --------------------------------------------------------------------- > To unsubscribe, e-mail: user-unsubscr...@struts.apache.org > For additional commands, e-mail: user-h...@struts.apache.org > > > -- View this message in context: http://www.nabble.com/How-to-render-a-JSP-Struts2-action-to-send-it-%28mail%2C-...%29-tp21982445p21984215.html Sent from the Struts - User mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: user-unsubscr...@struts.apache.org For additional commands, e-mail: user-h...@struts.apache.org