[英]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://commons.apache.org/proper/commons-jelly/
通過這種方式,您可以將模板組合為HTML或XML,並向其中注入您的邏輯可能檢索到的任何相關數據(甚至可以將某些邏輯集成在他們自己的模板語言中,例如if-then-else或while-loop結構)。
在最糟糕的情況下,渲染完整的JSP是完全必要的,你可以破解一些東西
您可以從MyEmailAction執行此方法,但將其傳遞給被攻擊的ServletResponse。 這將是您實現ServletResponse編寫的一些類...但是將結果寫入一些ByteArrayOutputStream
。 在頁面呈現之后(在您的假ServletResponse上),您可以從那里檢索它(實際上使用servlet容器作為您自己的模板引擎)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.