2013-07-03 68 views
0

我需要在沒有格式化爲html(沒有標題和沒有html標記)的jsf頁面中顯示輸出,而是作爲一個簡單的文本文件。這是可能的JSF 2.0或我需要一個servlet?謝謝Jsf頁面爲普通/無標題的文本html

編輯: 客戶端通過url(帶參數)發出請求,我必須給它一個響應。我知道我可以爲此使用一個servlet,但想知道是否可以使用Bean/JSF。問題是我必須給出不能是html文件,而是文本文件(用於簡單解析)的響應,但不應下載,而是直接在瀏覽器中顯示。我希望我很清楚

+0

刪除.xhtml文件中的所有標籤,它將打印純文本。 – Makky

+0

我不必手動操作。客戶端發出請求,我必須給它一個不應該是html頁面而是文本文件的響應。這個文本文件將包含由支持bean java完成的處理。 –

+0

據我瞭解,我理解html內容並不需要。你需要發送一個文本文件到客戶端下載一個文本文件? – erencan

回答

2

我知道我可以使用servlet的這一點,但想知道是否可以使用豆/ JSF來代替。

是的,在JSF中也是很有可能的。整個頁面的facelet可以是這樣的:

<ui:composition 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:ui="http://java.sun.com/jsf/facelets"> 
    <f:event type="preRenderView" listener="#{bean.renderText}" /> 
</ui:composition> 

和bean的相關方法可以是這樣的:

public void rendertext() throws IOException { 
    FacesContext fc = FacesContext.getCurrentInstance(); 
    ExternalContext ec = fc.getExternalContext(); 
    Map<String, String> params = ec.getRequestParameterMap(); 
    String foo = params.get("foo"); // Returns request parameter with name "foo". 
    // ... 

    ec.setResponseContentType("text/plain"); 
    ec.setResponseCharacterEncoding("UTF-8"); 
    ec.getResponseOutputWriter().write("Some text content"); 
    // ... 

    fc.responseComplete(); // Important! Prevents JSF from proceeding to render HTML. 
} 

但是,你則基本上濫用 JSF是錯誤的工具目的。在這種特殊情況下,JSF會增加太多的開銷,而這完全不需要。一個servlet會好很多。您可以使用@WebServlet註釋進行註冊,而不需要任何XML配置。你也不需要Facelet文件了。

1

您可以使用Java Servlet以純文本形式輸出響應。

例子:

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    response.setHeader("Content-Type", "text/plain"); 
    response.setHeader("success", "yes"); 
    PrintWriter writer = response.getWriter(); 
    writer.write("This is plain response\n"); 
    writer.close(); 
} 
+0

如果您的反對票發表評論。 – Makky

0

如果您使用生成此類內容的組件,JSF將只呈現HTML。 可以產生text/html的內容是這樣的:

<f:view xmlns:ui="http://xmlns.jcp.org/jsf/facelets" 
    xmlns:f="http://xmlns.jcp.org/jsf/core" 
    contentType="text/plain" 
    encoding="UTF-8"> 
    <ui:composition> 
     Your plain text goes here. 
     You can use expressions as usual: #{myBean.value}. 
    </ui:composition> 
</f:view> 

僅僅是純文本將被渲染。使用f:view組件屬性設置響應頭。