Ci sono diversi modi per farlo. Farlo in JSP è un po 'brutto.
Come già accennato è possibile utilizzare un servlet e inserire/caricare le variabili in tale posizione. Ad esempio, accedendo al contesto di sessione:
MyBean myBean = (MyBean)FacesContext.getCurrentInstance()
.getExternalContext().getSessionMap().get("myBean");
Oppure si può uscita alla risposta HTTP da un metodo in Backing Bean. Ad esempio:
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();
}
Oppure, se si utilizza Facelets è possibile impostare il tipo di risposta nel tag <f:view>
.
Perché il tag JSP è "brutto"? Se hai una pagina che fornisce XML allora sembra la cosa più logica da fare? Immagino che si riduca a voler generare un flusso XML come nell'esempio o se vuole definire la struttura XML nel JSP e usare il suo backing-bean per riempire gli elementi dei dati. –
Vero. Ci possono essere alcune situazioni in cui il rendering sulla pagina potrebbe essere "utile" ma IMO di solito è brutto. Lo stesso vale per farlo tramite Facelets o qualsiasi altra struttura "vista". – Damo