我在使用监听器的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
}
我做错了什么?如果有,请随时纠正我。感谢。
答案 0 :(得分:1)
我在您使用的ajax代码中发现了
listener="#
{customersFeedbackController.setMessageAsRead()}"
代替使用以下代码:
listener="#
{customersFeedbackController.setMessageAsRead}"
从支持bean调用函数不需要括号。
还将SelectEvent
添加到您的支持bean方法中。喜欢:
public void setMessageAsRead(SelectEvent event){}
答案 1 :(得分:0)
确保数据表位于表单内以触发ajax事件。