2013-01-08 43 views
0

我正試圖使用​​jQuery.post從我的jsf頁面向服務器發送一些數據。我已經把url作爲url來處理請求。我能夠獲取數據,但無法將回復發送回我的jQuery.post調用。如何在JSF中使用jQuery.post實現AJAX?

我的僞代碼:

jQuery.post('localhost/mypage.jsf', { data: 'xyz' }, function(res){ 
    console.log(res); 
}); 

我能夠得到data變量在我的處理程序類,但無法發送回一個響應。

任何想法,我怎麼能做得更好?

回答

1

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