2012-06-27 33 views
15

Tôi đang làm việc trên một ứng dụng JSF và tôi muốn làm mới định kỳ một thành phần với ajax Giống như hành vi của vùng thông báo facebook. Tôi có thể làm như thế nào?JSF, làm mới định kỳ một thành phần với ajax?

+5

Trong các câu hỏi trong tương lai, sẽ hữu ích nếu bạn đề cập một cách rõ ràng thư viện thành phần nào bạn sử dụng, như PrimeFaces. Nếu bạn không đề cập đến bất cứ điều gì, JSF tiêu chuẩn sẽ luôn luôn được giả định. – BalusC

Trả lời

30

Thăm dò ý kiến ​​là những gì bạn cần phải sử dụng

Thăm dò ý kiến ​​thành phần thực hiện cuộc gọi ajax trong một khoảng thời gian xác định.

Ví dụ Primefaces Poll

<h:form id="form"> 
    <h:outputText id="txt_count" value="#{counterBean.count}" /> 
    <p:poll interval="3" listener="#{counterBean.increment}" update="txt_count" /> 
</h:form> 

liên kết để giới thiệu Primefaces Ajax Poll

cách tiếp cận JSF tinh khiết sẽ được sử dụng timer js rằng sẽ gọi kỳ document.getElementById('someFormId:idOfButton').click();

hoặc jquery $("#someFormId\\:idOfButton").click();

trong khi nút sẽ trông l ike

<h:commandButton id="idOfButton"> 
    <f:ajax render="txt_count"></f:ajax> 
</h:commandButton> 

một cái gì đó như thế này này

setInterval(function(){$("idOfButton").click()},3000); 

Thông tin thêm về timer JavaScript Timing Events

+2

Dựa trên lịch sử câu hỏi của OP, anh ấy đang sử dụng PrimeFaces, vì vậy đó là một bộ đồ hoàn hảo. – BalusC

5

Trong RichFaces có một thành phần bình chọn là tốt. Đây là một ví dụ tốt đẹp they cung cấp

<a4j:region> 
     <h:form> 
      <a4j:poll id="poll" interval="1000" enabled="#{userBean.pollEnabled}" reRender="poll,grid"/> 
     </h:form> 
</a4j:region> 

<h:form> 
     <h:panelGrid columns="2" width="80%" id="grid"> 
      <h:panelGrid columns="1"> 
       <h:outputText value="Polling Inactive" rendered="#{not userBean.pollEnabled}" /> 
       <h:outputText value="Polling Active" rendered="#{userBean.pollEnabled}" /> 
       <a4j:commandButton style="width:120px" id="control" value="#{userBean.pollEnabled?'Stop':'Start'} Polling" reRender="poll, grid"> 
        <a4j:actionparam name="polling" value="#{!userBean.pollEnabled}" assignTo="#{userBean.pollEnabled}"/> 
       </a4j:commandButton> 
      </h:panelGrid> 
      <h:outputText id="serverDate" style="font-size:16px" value="Server Date: #{userBean.date}"/> 
    </h:panelGrid> 
</h:form> 
Các vấn đề liên quan