如何从JSF生成JSON响应?

Jit*_*dra 17 jsf json

我创建了一个页面,我想从JSF页面获取JSON响应,但是当我尝试获取页面时,它会向我显示整个html页面.

<html xmlns="http://www.w3.org/1999/xhtml"><head>
        <title>Facelet Title</title></head><body>
[{"value": "21", "name": "Mick Jagger"},{"value": "43", "name": "Johnny Storm"},{"value": "46", "name": "Richard Hatch"},{"value": "54", "name": "Kelly Slater"},{"value": "55", "name": "Rudy Hamilton"},{"value": "79", "name": "Michael Jordan"}]

</body></html>
Run Code Online (Sandbox Code Playgroud)

Bal*_*usC 38

JSF是一个生成HTML的MVC框架,而不是某种REST Web服务框架.您实际上是在滥用JSF作为Web服务.您的具体问题只是由您自己<html>在视图文件中放置标签等引起的.

如果你真的坚持,那么你总是可以通过使用<ui:composition>而不是<html>.您还需要确保使用了正确的内容类型application/json,这在JSF中默认为text/html.

<ui:composition
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets">
    <f:event type="preRenderView" listener="#{bean.renderJson}" />
</ui:composition>
Run Code Online (Sandbox Code Playgroud)

public void renderJson() throws IOException {
    FacesContext facesContext = FacesContext.getCurrentInstance();
    ExternalContext externalContext = facesContext.getExternalContext();
    externalContext.setResponseContentType("application/json");
    externalContext.setResponseCharacterEncoding("UTF-8");
    externalContext.getResponseOutputWriter().write(someJsonString);
    facesContext.responseComplete();
}
Run Code Online (Sandbox Code Playgroud)

但我强烈建议您查看JAX-RS或JAX-WS,而不是滥用JSF作为JSON Web服务.使用正确的工具完成工作.

也可以看看:

  • 如果您只使用 JSON 库而不是自己摆弄/构建它,那么 servlet 会更容易。另请参阅http://stackoverflow.com/questions/4112686/how-to-use-servlets-and-ajax (2认同)

归档时间:

查看次数:

23440 次

最近记录:

9 年,11 月 前