我想同时实现两件事。
我在Struts2中有一个常规的jsp页面。xx / yy / zz / email.jsp
<html> <head> </head> <body> <s:property value="email"/> </body> </html>
此页面的网址可以是xx / yy / zz / myEmail.action,而某些操作类可以处理它…
public class MyEmailAction { private String email; public String execute(){ this.email = 'abc@xyz.com'' } //setter and getter for 'email' ...... }
现在,我想执行另一个操作,该操作将xx / yy / zz / myEmail.action页面的结果作为电子邮件发送。
public class MyEmailAction { private String email; public String execute(){ this.email = 'abc@xyz.com'' } public String send() { this.email = 'abc@xyz.com'' Map mapping; //put this.email into the mapping String result = getResultOfJSP('../../../xx/yy/zz/email.jsp', mapping); Email.send('me@me.com', 'you@you.com', 'My Subject', result); } //setter and getter for 'email' ...... }
因此,问题在于:如何获得作为字符串的JSP结果?
我之所以想这样做的原因很明显是我想在一个地方(email.jsp)管理该模板。
我知道我可以使用另一个速度(vm)页面,该页面具有与jsp完全相同的html,但是具有速度标记。但是,每当需要更改此模板时,都必须在两个地方都进行更改。
我想我也可以使用URL来获取结果,但是我不希望使用这种方式,因为这是对服务器的另一个请求。
谢谢
我在使用邮件servlet时遇到了这个问题,使用它来获取jsp的结果作为字符串:
HttpServletResponseWrapper responseWrapper = new HttpServletResponseWrapper(response) { private final StringWriter sw = new StringWriter(); @Override public PrintWriter getWriter() throws IOException { return new PrintWriter(sw); } @Override public String toString() { return sw.toString(); } }; request.getRequestDispatcher("email.jsp").include(request, responseWrapper); String result = responseWrapper.toString();
设置电子邮件以提供html内容:
Email.send('me@me.com', 'you@you.com', 'My Subject', result);