使用Struts2视图发送模板电子邮件
我正在使用Struts2,我想将我的一个操作的html输出作为电子邮件发送。 换句话说,我不想在浏览器中显示输出的html,而是想将其作为电子邮件发送 我正在使用ApacheTiles创建我的页面 编辑:使用Struts2视图发送模板电子邮件,struts2,html-email,apache-tiles,Struts2,Html Email,Apache Tiles,我正在使用Struts2,我想将我的一个操作的html输出作为电子邮件发送。 换句话说,我不想在浏览器中显示输出的html,而是想将其作为电子邮件发送 我正在使用ApacheTiles创建我的页面 编辑: 一般来说,我们能否将struts视图的html结果作为一个流传递给另一个操作?首先,我需要指出,使用JSP作为电子邮件模板不是一个好主意。但是,如果您需要这样做,或者您需要记录用户看到的确切HTML(或任何其他原因),您可以这样做: 为您的操作创建一个拦截器 从ServletActionCon
一般来说,我们能否将struts视图的html结果作为一个流传递给另一个操作?首先,我需要指出,使用JSP作为电子邮件模板不是一个好主意。但是,如果您需要这样做,或者您需要记录用户看到的确切HTML(或任何其他原因),您可以这样做:
Struts与streams一起工作,但不清楚您希望如何将流传递给action?从技术上来说,是的,但我几乎可以肯定这不是我会采取的方法。我宁愿电子邮件是用FreeMarker/etc之类的东西构建的,并以这种方式进行处理。@DaveNewton,想象一下,您已经有了该模板的jsp版本,并且您希望给用户发送电子邮件的选项。然后创建一个新模板需要双重维护我理解这个问题。问题是,除非在应用程序容器外有一个JSP引擎,否则以这种方式使用JSP既困难又脆弱。
import java.io.CharArrayWriter;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
//STEP 1
public class EmailInterceptor implements Interceptor {
@Override
public String intercept(ActionInvocation actionInvocation) throws Exception {
// STEP 2
HttpServletResponse response = ServletActionContext.getResponse();
PrintWriter out = response.getWriter();
// STEP 3
CharResponseWrapper responseWrapper = new CharResponseWrapper((HttpServletResponse) response);
ServletActionContext.setResponse(responseWrapper);
// STEP 4
String result = actionInvocation.invoke();
// STEP 5
String servletResponse = new String(responseWrapper.toString());
out.write(servletResponse + "whatever");
// STEP 6
return result;
}
public class CharResponseWrapper extends HttpServletResponseWrapper {
private CharArrayWriter output;
public String toString() {
return output.toString();
}
public CharResponseWrapper(HttpServletResponse response) {
super(response);
output = new CharArrayWriter();
}
public PrintWriter getWriter() {
return new PrintWriter(output);
}
}
}