2014-03-04 81 views
0

我在使用監聽器的ajax標籤來調用託管bean中的方法時遇到問題。以下代碼不起作用。雖然ajax調用JavaScript方法view.show(),但它不會在偵聽器屬性中調用managedbean方法。如何使用JSF(Primefaces)ajax Listener?

<p:dataTable id="dataTable" var="customersFeedback" 
    value="#{customersFeedbackController.allReadFeedbacks}" 
    widgetVar="reservationTable" 
    selectionMode="single" 
    selection="#{customersFeedbackController.customersFeedback}" 
    rowKey="#{customersFeedback.id}"> 

    <p:ajax event="rowSelect" update=":viewFeedbackForm:viewDlg" listener="# 
    {customersFeedbackController.setMessageAsRead()}" oncomplete="view.show()"/> 
</p:dataTable> 

這是我的managedbean。更新方法只是更新數據庫中的CustomerFeedback對象的一種方法。

@ManagedBean(name = "customersFeedbackController") 
public class CustomersFeedbackController implements Controller<CustomersFeedback> { 

    private CustomersFeedback customersFeedback = new CustomersFeedback(); 
    // other fields here 

    @Override 
    public void update() { 
     customersFeedbackDao.update(customersFeedback); 
    } 

    public void setMessageAsRead() { 
     customersFeedback.setStatus("Read"); 
     this.update(); 
     System.out.println("Method Executed"); // Just a test 
    } 

    // Other methods here 

} 

我做錯了什麼?如果有的話,請隨時糾正我。謝謝。

+0

你必須在你的bean函數中傳遞一個事件參數,試着這樣做,讓我知道 – Anas

+0

仍然沒有工作 – steven0529

+0

@anas -that不正確;在事件監聽器中傳遞參數並不是強制性的。 – kolossus

回答

0

我觀察到,在你的代碼爲Ajax你下面的代碼使用

listener="# 
    {customersFeedbackController.setMessageAsRead()}" 

,而不是這個用途:不需要

listener="# 
    {customersFeedbackController.setMessageAsRead}" 

支架從後臺bean調用函數。

還將SelectEvent添加到您的支持bean方法。像: public void setMessageAsRead(SelectEvent event){}

參考:http://www.primefaces.org/showcase/ui/ajaxifyAction.jsf

+0

我已經做了你所說的。仍然沒有工作。 – steven0529

0

確保數據表是一個形式裏面,以觸發Ajax事件。