簡體   English   中英

Struts2 - 如何將JSP頁面的結果作為動作類中的字符串獲取(對於電子郵件)

[英]Struts2 - How can I get the result of a JSP page as a string in an action class (for emails)

我想同時實現兩件事。

我在Struts2中有一個常規的jsp頁面。 XX / YY / ZZ / email.jsp

<html>
<head>
</head>
<body>
    <s:property value="email"/>
</body>
</html>

這個頁面的url可能是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'
    ......
}

所以問題在於:我如何獲得一個RENDERED 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);

這不是您問題的答案,但我建議您考慮使用模板引擎撰寫電子郵件,例如Velocity或Jelly

http://velocity.apache.org/

http://commons.apache.org/proper/commons-jelly/

通過這種方式,您可以將模板組合為HTML或XML,並向其中注入您的邏輯可能檢索到的任何相關數據(甚至可以將某些邏輯集成在他們自己的模板語言中,例如if-then-else或while-loop結構)。

在最糟糕的情況下,渲染完整的JSP是完全必要的,你可以破解一些東西

RequestDispatcher的::包括

您可以從MyEmailAction執行此方法,但將其傳遞給被攻擊的ServletResponse。 這將是您實現ServletResponse編寫的一些類...但是將結果寫入一些ByteArrayOutputStream 在頁面呈現之后(在您的假ServletResponse上),您可以從那里檢索它(實際上使用servlet容器作為您自己的模板引擎)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM