tutorial struts1 servlet metodo funciona etiquetas ejemplos como java html jsp struts2 velocity

java - struts1 - Struts2: cómo puedo obtener el resultado de una página JSP como una cadena en una clase de acción(para correos electrónicos)



struts servlet (2)

Esta no es la respuesta a su pregunta, pero le sugiero que considere usar un motor de plantillas para redactar sus correos electrónicos, como Velocity o Jelly.

http://velocity.apache.org/

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

De esta forma puede componer sus plantillas como HTML o XML e inyectar allí cualquier dato relevante que su lógica haya recuperado (e incluso alguna lógica integrada en sus propios lenguajes de plantilla, como las estructuras if-then-else o while-loop).

En el peor de los casos que es completamente necesario para renderizar el JSP completo, podrías hackear algo en

RequestDispatcher :: include

Puede ejecutar este método desde su MyEmailAction, pero pasándole un ServletResponse pirateado. Esta sería una clase escrita por usted implementando ServletResponse ... pero escribiendo el resultado en algún ByteArrayOutputStream . Después de que se represente la página (en tu ServletResponse falso) podrías simplemente recuperarla desde allí (en realidad usando el contenedor de servlets como tu propio motor de plantillas)

Quiero lograr las 2 cosas al mismo tiempo.

Tengo una página jsp regular en Struts2. xx / yy / zz / email.jsp

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

La URL de esta página podría ser xx / yy / zz / myEmail.action, mientras que alguna clase de acción lo manejará ...

public class MyEmailAction { private String email; public String execute(){ this.email = ''[email protected]'''' } //setter and getter for ''email'' ...... }

Ahora, me gustaría tener otra acción, que envíe el resultado de la página de xx / yy / zz / myEmail.action como correo electrónico.

public class MyEmailAction { private String email; public String execute(){ this.email = ''[email protected]'''' } public String send() { this.email = ''[email protected]'''' Map mapping; //put this.email into the mapping String result = getResultOfJSP(''../../../xx/yy/zz/email.jsp'', mapping); Email.send(''[email protected]'', ''[email protected]'', ''My Subject'', result); } //setter and getter for ''email'' ...... }

Entonces, la pregunta es: ¿CÓMO PUEDO OBTENER EL RESULTADO DE UNA JSP RENOVADA COMO UNA CUERDA?

Esta es la razón por la que quiero esto es, obviamente, que quiero administrar esta plantilla en un solo lugar (email.jsp).

Sé que podría usar otra página de velocidad (vm) que tiene exactamente el mismo html que el jsp, pero con márgenes de velocidad. Pero cada vez que necesito hacer un cambio en esta plantilla, tengo que hacerlo en ambos lugares.

Creo que también podría usar la URL para obtener el resultado, pero prefiero no usarlo de esta manera, ya que es otra solicitud al servidor.

Gracias


Tuve este problema con el uso de un servlet de correo usar esto para obtener el resultado de jsp como una cadena:

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();

Establezca el correo electrónico para dar contenido html:

Email.send(''[email protected]'', ''[email protected]'', ''My Subject'', result);