回答
有幾種方法可以做到這一點。在JSP中執行它有點令人討厭。
如前所述,您可以使用Servlet並在其中注入/加載變量。例如,通過訪問會話的上下文:
MyBean myBean = (MyBean)FacesContext.getCurrentInstance()
.getExternalContext().getSessionMap().get("myBean");
或者您可以將其輸出到從支持bean的方法的HTTP響應。例如:
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();
}
或者,如果你正在使用Facelets的可以設置在<f:view>
標籤響應類型。
我將有一個servlet返回XML而不是JSF的東西。我將JSF(以及JSP和任何其他UI層)作爲返回「人類可讀」的內容。 XML是機器可讀的。
RE:會話數據 - 我從來沒有這樣做,不使用JSF只知道它的UI層,但快速谷歌的回報:http://blogs.oracle.com/chrisf/entry/retrieving_jsf_session_variables_in
你需要指定content-type的(14.17秒)。返回頁面爲text/xml
。目前它將被設置爲text/html
。
瀏覽器使用了各種機制來確定返回的數據的類型,但正確,最可靠的方法是設置HTTP Content-type
標頭。
對不起 - 我不是JSF知識淵博的人,所以我不能建議如何解決這個問題,但它現在給你一些東西來尋找!
是的我想設置此內容類型,但我不知道在JSF頁面中執行此操作。 – Kiva 2009-08-25 11:18:37
您可以在JSP中設置內容類型。我假設你正在使用JSP並從支持bean創建xml內容?一個JSP像這樣將輸出XML:
<%@page contentType="text/xml"%><?xml version="1.0" encoding="UTF-8"?>
<portfolio>
<stock>
<symbol>SUNW</symbol>
<name>Sun Microsystems</name>
<price>17.1</price>
</stock>
<stock>
<symbol>AOL</symbol>
<name>America Online</name>
<price>51.05</price>
</stock>
<stock>
<symbol>IBM</symbol>
<name>International Business
Machines</name>
<price>116.10</price>
</stock>
<stock>
<symbol>MOT</symbol>
<name>MOTOROLA</name>
<price>15.20</price>
</stock>
</portfolio>
你可以便輕易改變這些硬編碼值是從你通常會爲HTML的輸出的JSP的方式做你的後盾,豆豆值。
好吧,我會試試這個;) – Kiva 2009-08-25 11:49:58
在這裏,你已經獲得了一些示例代碼,做一個的facelet:
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
<ui:define name="metadata">
<f:metadata>
<f:event type="preRenderView"
listener="#{clientManager.initialize}" />
</f:metadata>
</ui:define>
<f:view contentType="text/xml">
<ui:repeat var="client" value="#{clientManager.list}">
<client>#{client.name}</client>
</ui:repeat>
</f:view>
</ui:composition>
像渲染HTML時它的方式,JSF評估其自己的標籤,並呈現你的XML標籤的使用他們是。
- 1. 使用循環在JSF中創建commandButton?
- 2. 無法使用iText和JSF創建PDF
- 3. 使用ElementTree創建Xml
- 4. 使用XML創建URL
- 5. 使用java創建xml
- 6. 使用SQL創建Xml
- 7. 使用DataSet中創建XML
- 8. 使用tinyxml創建xml
- 9. 使用LinqToExcel創建XML
- 10. 使用XSLT創建新XML
- 11. 使用Haml創建XML
- 12. 使用縮進創建XML
- 13. 使用TSQL創建XML
- 14. 使用XML創建dojo.store.memory?
- 15. 使用Xml創建列表
- 16. 創建使用JAXB從XML
- 17. 使用VTD創建XML XMLModifier
- 18. 使用xml屬性創建XML結構
- 19. 使用創建XML LINQ到XML API
- 20. 使用XSLT代碼從xml創建XML
- 21. 如何使用XSL從XML創建XML?
- 22. 使用DOM創建XML時創建空XML
- 23. 如何使用兩個outputStreams(使用JSF)創建zip文件
- 24. jsf上下文創建
- 25. 無法創建JSF 2.0表
- 26. JSF新網站創建
- 27. 創建下拉列表jsf
- 28. JSF:成功創建後調用javascript
- 29. 用Maven和IntelliJ創建JSF項目
- 30. 用分頁和排序創建JSF表
爲什麼JSP標籤是「討厭的」?如果你有一個提供XML的頁面,那麼這似乎是合乎邏輯的事情? 我猜這是歸結爲他是否想要輸出一個XML流,或者他是否想要在JSP中定義XML結構並使用他的支持bean來填充數據元素。 – 2009-08-25 13:02:23
是的。在某些情況下,在頁面上渲染它可能是「有用的」,但IMO通常是討厭的。通過Facelets或任何其他「視圖」框架來做同樣的事情。 – Damo 2009-08-25 13:42:34