使用Ajax方法</p:datatable>的JSF- <p:datatable>问题

时间:2014-05-28 13:18:16

标签: java ajax jsf-2 primefaces datatable

我有一个<p:dataTable>并且连续我有一个日期字段,我需要在用户系统地或手动更改日期时向用户显示对话,将调用Ajax方法来更新消息来自支持豆。

以下是我正在使用的特定行的代码。

<p:calendar value="#{dets.exceptionDueDate}" pattern="MM/dd/yyyy"
                            size="10" navigator="true"
                            rendered="#{systemDetailsBean.editCmdActionflg==true and (dets.firstColumn!='1' or dets.secondColumn!='1')}">
                            <f:convertDateTime pattern="MM/dd/yyyy" />
                            <p:ajax event="dateSelect"
                                listener="#{systemDetailsBean.showPopup}"
                                process="@this :SystemDetailsinfoForm:line :commentsform:commentsdt"
                                partialSubmit="true" />
                            <p:ajax event="change" listener="#{systemDetailsBean.showPopup}"
                                process="@this :SystemDetailsinfoForm:line :commentsform:commentsdt"
                                partialSubmit="true" />
                            <f:attribute name="index" value="_#{index}" />
                            <f:attribute name="componentId" value="exe" />
                        </p:calendar>


正如您所看到的,日历正在调用两种事件方法,即&#34; dateselect&#34;和&#34;改变&#34;
我添加了两种方法。用户可以通过电子和系统两种方式提供日期。

支持bean中的Ajax方法在下面给出了

   public void showPopup(ActionEvent event) { 

String compId = (String) event.getComponent().getAttributes()
                        .get("componentId");
                int index = Integer.parseInt(((String) event.getComponent()
                        .getAttributes().get("index")).replace("_", ""));
//Blah blah...
    }


我的问题是考虑<p:dataTable>12 rows当我更改特定行中的日期列时,调用了12 times的AjaxMethod。所以由于这个原因我不能能够在辅助bean的Ajax方法中处理一些消息。

当我在特定行中选择日期列时,如何才能限制Ajax方法的调用一次。如您所见,我可以获取行的索引。 但我不知道如何限制在XHTML中调用的方法。

任何建议对解决此问题都非常有帮助。

1 个答案:

答案 0 :(得分:0)

我通过将“process”属性替换为“update”属性解决了这个问题,并添加了“execute = @ this”属性。

这是我更新的代码

<p:ajax event="dateSelect"    execute="@this"
                                listener="#{systemDetailsBean.showPopup}"
                                update="@this :SystemDetailsinfoForm:line :commentsform:commentsdt"  
                                partialSubmit="true" />
                            <p:ajax event="change" listener="#{systemDetailsBean.showPopup}" execute="@this"
                                update="@this :SystemDetailsinfoForm:line :commentsform:commentsdt"
                                partialSubmit="true" />