我正在使用Struts2,我想将我的一个动作的html输出作为电子邮件发送。 换句话说,我不想在浏览器中显示输出html,而是将其作为电子邮件发送。
我使用Apache Tiles来创建我的页面。
编辑: 通常,我们可以将struts视图的html结果作为流获取并将其传递给另一个动作吗?
答案 0 :(得分:0)
首先,我需要提一下,使用JSP作为电子邮件模板并不是一个好主意。但是,如果您需要这样做,或者您需要记录用户看到的确切HTML(或任何其他原因),您可以这样做:
这是我的代码的一部分:
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);
}
}
}