如何使用JSF(Primefaces)ajax Listener?

时间:2014-03-04 04:20:47

标签: ajax jsf primefaces

我在使用监听器的ajax标签调用托管bean中的方法时遇到问题。以下代码不起作用。虽然ajax正在调用JavaScript方法view.show(),但它不会在侦听器属性中调用managedbean方法。

<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>

这是我的托管bean。 update方法只是一种更新数据库中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

}
我做错了什么?如果有,请随时纠正我。感谢。

2 个答案:

答案 0 :(得分:1)

我在您使用的ajax代码中发现了

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

代替使用以下代码:

listener="#
     {customersFeedbackController.setMessageAsRead}"

从支持bean调用函数不需要括号。

还将SelectEvent添加到您的支持bean方法中。喜欢: public void setMessageAsRead(SelectEvent event){}

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

答案 1 :(得分:0)

确保数据表位于表单内以触发ajax事件。