JSF基本上是工作的錯誤工具。您應該使用像JAX-RS這樣的Web服務框架,而不是像JSF這樣的基於組件的MVC框架。
但是如果你真的堅持,你可以濫用JSF以下面的方式來發送任意迴應。在視圖中使用<f:event type="preRenderView">
以在視圖呈現前調用方法,並使用<f:viewParam>
將請求參數設置爲bean屬性(注意,這對於GET請求也有效)。
<f:metadata>
<f:viewParam name="data" value="#{bean.data}" />
<f:event type="preRenderView" listener="#{bean.process}" />
</f:metadata>
喜歡的東西,如果你打算用Google Gson幫助或東西返回JSON如下:
public void process() throws IOException {
String message = "Hello! You have sent the following data: " + data;
String json = new Gson().toJson(Collections.singletonMap("message", message));
FacesContext context = FacesContext.getCurrentInstance();
ExternalContext ec = context.getExternalContext();
ec.setResponseContentType("application/json");
ec.setResponseCharacterEncoding("UTF-8");
ec.getResponseOutputWriter().write(json);
context.responseComplete(); // Prevent JSF from rendering the view.
}
同樣,你濫用JSF的錯誤的工具的工作。看看JAX-RS或者甚至可能是普通的香草servlet。另見Servlet vs RESTful。