jsf页面为plain / text,不带标题html

时间:2013-07-03 08:12:17

标签: java jsf servlets jsf-2 primefaces

我需要在jsf页面中显示输出,该页面未格式化为html(没有标题且没有html标记),而是作为一个简单的文本文件。这可以使用JSF 2.0,或者我需要一个servlet?感谢

编辑: 客户端通过url(带参数)发出请求,我必须给它一个响应。我知道我可以使用servlet,但想知道是否可以使用Bean / JSF。问题是我必须给出不能是html文件但是文本文件(用于简单解析)的响应,但是不应该下载但直接在浏览器中显示。我希望我很清楚

3 个答案:

答案 0 :(得分:2)

  

我知道我可以使用servlet,但想知道是否可以使用Bean / 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 :(得分: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();
}

答案 2 :(得分:0)

如果您使用生成此类内容的组件,则JSF仅呈现HTML。 您可以生成如下文本/ 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组件属性可以设置响应头。