我创建了一个页面,我想从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服务.使用正确的工具完成工作.
归档时间: |
|
查看次数: |
23440 次 |
最近记录: |