Existen varias formas de hacerlo. Hacerlo en JSP es un poco desagradable.
Como ya se mencionó, puede usar un servlet e inyectar/cargar sus variables allí. Por ejemplo, mediante el acceso al contexto de sesión:
MyBean myBean = (MyBean)FacesContext.getCurrentInstance()
.getExternalContext().getSessionMap().get("myBean");
O se puede dar salida a la respuesta HTTP de un método en su Copia de Bean. Por ejemplo:
try {
String xml = "<person>damian</person>";
FacesContext ctx = FacesContext.getCurrentInstance();
final HttpServletResponse resp = (HttpServletResponse)ctx.getExternalContext().getResponse();
resp.setContentType("text/xml");
resp.setContentLength(xml.length());
resp.getOutputStream().write(xml.getBytes());
resp.getOutputStream().flush();
resp.getOutputStream().close();
ctx.responseComplete();
} catch (IOException e) {
e.printStackTrace();
}
O si está utilizando Facelets que puede establecer el tipo de respuesta de la etiqueta <f:view>
.
¿Por qué la etiqueta JSP es "desagradable"? Si tiene una página que entrega XML, entonces parece lo lógico que hacer. Supongo que se reduce a si quiere generar un flujo XML como en su ejemplo o si quiere definir la estructura XML en el JSP y usar su respaldo para completar los datos. –
Es cierto. Puede haber algunas situaciones en las que presentarla en la página podría ser "útil", pero la OMI suele ser desagradable. Lo mismo vale para hacerlo a través de Facelets o cualquier otro marco de "vista". – Damo