2014-03-04 72 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事件。