2013-01-23 35 views
6

tôi muốn biết có cách nào để kích hoạt phương thức bean được quản lý jsf hay không (tham số kiểu AjaxBehaviorEvent: cùng kích hoạt khi sử dụng f: ajax) trực tiếp bằng cách sử dụng một yêu cầu máy chủ jquery ajax.Bằng cách này, ima jsf developper và tôi không tìm thấy một ví dụ về cách sử dụng jquery ajax với Java EE làm khung công tác phía máy chủ, tất cả các ví dụ tôi tìm thấy là với php..so tôi muốn có một ví dụ hoàn chỉnh về việc đó. tôi nghĩ rằng workaround khác có thể là để thực hiện một commandLink được gửi với jquery ở phía khách hàng và đi qua các thông số thông qua cuộc gọi đó nhưng tôi thích giải pháp cũ và tôi muốn nó hoạt động.Sử dụng jquery ajax để gọi phương thức bean được quản lý jsf (một trình xử lý lắng nghe AjaxsjiorEvent)

Cảm ơn rất nhiều vì đã trợ giúp!

Trả lời

7

Ở đây bạn đi:

<script type="text/javascript"> 

    doAwesomeness(); 

</script> 

Trong trang của bạn:

<a4j:jsFunction name="doAwesomeness" action="#{awesomeBean.awesomeMethod}"/> 

Chúc may mắn!

+0

Thnx thành viên stackoverflow tuyệt vời :) – Bardelman

+1

Nhưng đây không phải là JSF thuần túy. Thẻ đến từ [RichFaces] (http://docs.jboss.org/richfaces/latest_3_3_X/en/devguide/html/a4j_jsFunction.html). – lucasvc

6

jQuery yêu cầu ajax và yêu cầu JSF ajax sử dụng khác nhau js thư viện, tôi không nghĩ rằng có một điểm trong cố gắng để kết hợp những để quá nhiều ...

Nếu bạn whish bắn một JSF quản lý hành động đậu từ jQuery bạn sử dụng tốt hơn một ẩn h:commandButton cho mục đích đó ...

JSF:

<h:commandButton id="someId" action="#{someBean.someMethod}" style="display:none"> 
    <f:ajax render="someId" execute="someId"/> 
</h:commandButton> 

nếu bạn muốn vượt qua một số args ẩn hơn bạn có thể thêm một số ẩn nhiều thành phần JSF id trong ẩn h:commandButtonexecute thuộc tính, như vậy thuộc tính tương ứng của họ sẽ được cập nhật trên phía máy chủ ...

js

$("#someId").click(); 

Ở phía bên kia, nếu bạn muốn sử dụng dữ liệu bean được quản lý trong servlets tương ứng với jQuery của bạn gọi cho bạn luôn có thể truy cập mà JSF quản lý dữ liệu, như thế này: JSF - get managed bean by name

+0

Cảm ơn bạn đã trả lời nhưng tôi vẫn nghĩ rằng ngay cả jQuery ajax và JSF ajax sử dụng thư viện js khác nhau của một yêu cầu có thể được thực hiện từ một đến khác bởi vì tôi đoán rằng cả hai người trong số họ thực sự đối phó với yêu cầu HTTP để họ có thể giao tiếp .. – Bardelman

+0

tốt, bây giờ tôi đầu hàng .. tôi đã buộc phải phát hiện trên firebug làm thế nào một commandLink với một URL yêu cầu được hình thành cho tôi có thể làm tương tự với jquery-ajax, tôi thấy điều này: – Bardelman

+0

j_idt7 = j_idt7 & j_idt7% 3Aj_idt11 = mary & j_idt7% 3Aj_idt13 = mary & s_var1 = & s_proclength = & s_taskId = & javax.faces.ViewState = -1257726806850207849% 3A3895641171480667070 & javax.faces.source = j_idt7% 3Aj_idt50 & javax.faces.partial.event = nhấp & javax.faces.partial.execute = j_idt7% 3Aj_idt50 & javax.faces.partial.render = j_idt7% 3Acontent & taskname = marytask & javax.faces.behavior.event = click & javax.faces.partial.ajax = true – Bardelman

2

Trong bối cảnh đó như chỉ ra bởi islandguy, nếu bạn sử dụng Primefaces, bạn woud sử dụng lệnh <p:remoteCommand/>, như sau:

<script type="text/javascript"> 
     doAwesomeness(); 
</script> 

với:

<p:remoteCommand name="doAwesomeness" 
      actionListener="#{awesomeBean.awesomeMethod}" 
      oncomplete="jsToExecuteOnAjaxSuccess()" /> 

Hope this helps ..

Các vấn đề liên quan