为什么actionListener在ajax进程后使用p:commandButton调用



我试图打开一个对话框时,一个数据表内的按钮被点击。对话框包含另一个数据表,其中包含与按钮所属行相关的详细信息。侦听器设置详细数据表所需的变量。使用下面的代码片段,似乎更新(以及详细数据表使用的列表的创建)是在触发actionListener之前执行的,因此对话框中的dataTable始终为空。为什么?这是被通缉的行为吗?有别的办法解决我的问题吗?

我使用了action而不是actionListener,结果相同。

下面是第一个数据表中的元素按钮:

                       <p:column style="width:16px;padding-left:4px;padding-right:4px;">  
                            <f:facet name="header">
                            </f:facet>
                            <p:commandButton image="ui-icon ui-icon-search"
                                             style="width:1.8em;height:1.8em"
                                             onsuccess="tDialog.show()"
                                             title="#{msgs.dettaglio}"
                                             process="@this, timbrature_dt"
                                             update="timbrature_dt"
                                             immediate="true"
                                             actionListener="#{dispCongediMBean.timbratureDettAction(dett)}">  
                            </p:commandButton>  
                        </p:column>

对话如下:

       <p:dialog header="#{msgs.timbrature}" widgetVar="tDialog" resizable="false">  
                    <p:dataTable id="timbrature_dt" 
                                 value="#{dispCongediMBean.timbratureDataList}" 
                                 var="tdett">
                        <p:column>
                            <f:facet name="header">  
                                #{msgs.data}  
                            </f:facet>  
                            <h:outputText value="#{tdett.sDtComp}"/> 
                        </p:column>
                        ....

下面是调用的顺序:

INFO: getTimbratureDataList
INFO: Nessuna timbratura.
INFO: getTimbratureDataList
INFO: Nessuna timbratura.
INFO: getTimbratureDataList
INFO: Nessuna timbratura.
INFO: getDettaglioDataList list dettaglio: 4
INFO: timbratureDettAction
INFO: gius corrente 315

正如你所看到的,getTimbratureDataList()方法在actionListener timbratureDettAction()之前被调用,它正确地设置了这个值,不幸的是没有被使用。

我使用的是Glassfish和primefaces 2.1.1.

在我看来,您正在尝试处理当前按钮和对话框内容本身。因为这意味着需要重新构建组件树,所以当然要为细节对话框调用getter。

因此你只需要处理按钮,并且只重新渲染细节表:<p:commandButton image="ui-icon ui-icon-search" style="width:1.8em;height:1.8em" onsuccess="tDialog.show()" title="#{msgs.dettaglio}" process="@this" update="timbrature_dt" immediate="true" actionListener="#{dispCongediMBean.timbratureDettAction(dett)}">

相关内容

  • 没有找到相关文章

最新更新