小编典典

Struts2-如何获得JSP页面的结果作为操作类中的字符串(用于电子邮件)

jsp

我想同时实现两件事。

我在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来获取结果,但是我不希望使用这种方式,因为这是对服务器的另一个请求。

谢谢


阅读 224

收藏
2020-06-08

共1个答案

小编典典

我在使用邮件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);
2020-06-08