我需要在 jsf 页面中显示输出,该页面未格式化为 html(没有标题和没有 html 标签),而是作为一个简单的文本文件。这在 JSF 2.0 中是可能的,还是我必须需要一个 servlet?谢谢
编辑:客户端通过 url(带参数)发出请求,我必须给它一个响应。我知道我可以为此使用 servlet,但想知道是否可以使用 Bean/JSF 代替。问题是我必须给出不能是 html 文件而是文本文件(用于简单解析)的响应,但不应该下载而是直接显示在浏览器中。我希望我很清楚
我需要在 jsf 页面中显示输出,该页面未格式化为 html(没有标题和没有 html 标签),而是作为一个简单的文本文件。这在 JSF 2.0 中是可能的,还是我必须需要一个 servlet?谢谢
编辑:客户端通过 url(带参数)发出请求,我必须给它一个响应。我知道我可以为此使用 servlet,但想知道是否可以使用 Bean/JSF 代替。问题是我必须给出不能是 html 文件而是文本文件(用于简单解析)的响应,但不应该下载而是直接显示在浏览器中。我希望我很清楚
我知道我可以为此使用 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 文件。
您可以使用 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();
}
如果您使用生成此类内容的组件,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 组件属性,您可以设置响应标头。