PrimeFaces commandLink在TabView中只调用一次

时间:2014-10-07 18:37:44

标签: jsf primefaces tabview commandlink

我正在使用PrimeFaces 5.1。我有一个TabView组件,其中动态生成选项卡:

<p:tabView scrollable="true" 
           id="tabView" 
           dynamic="true" cache="false"
           value="#{reportTabBean.tabs}" 
           var="tab"
           activeIndex="#{reportTabBean.activeTab}">

...

</p:tabView>

选项卡的内容包含在<p:outputPanel>.内部。面板中包含纯HTML <table>标记和<ui:____>组件。选项卡内容构成报告。每个报告都有<p:commandLink>创建的可点击元素,这些元素在manged bean中调用了一个方法。这是简化的代码:

<p:outputPanel id="bcx-scorecard-panel" 
               rendered="#{ tab['class'].simpleName eq 'CSAE2EScorecardShowTab'}">

    <ui:repeat var="LOB" 
               value="#{tab.scorecardCSAE2E.getLOBs()}">
        <table>
            <tbody>
                <ui:repeat var="metric" 
                           value="#{tab.scorecardCSAE2E.getMetrics(LOB.filter)}">
                    <ui:fragment rendered="#{metric.type == 'metric'}">
                        <tr>
                            <ui:repeat var="dayNum" 
                                       value="#{tab.scorecardCSAE2E.daysInMonthIterator()}">
                                <td>

                                    <ui:fragment 
                                        rendered="#{null != metric.getDataFor(dayNum).value and metric.showDogEar(dayNum)}">
                                        <p:commandLink 
                                            immediate="true"  
                                            update=":dialogExceptionFillWriteOff, :exceptionFillWriteOffForm"
                                            action="#{exceptionWriteBean.populateExceptionPopup(tab.title, LOB.filter, null, metric, tab.scorecardCSAE2E, dayNum)}" 
                                            oncomplete="PF('dlgExceptionFillWriteOff').show()">
                                            #{metric.getDataFor(dayNum).value}
                                        </p:commandLink>
                                    </ui:fragment>
                                </td>
                            </ui:repeat>
                        </tr>
                    </ui:fragment>
                </ui:repeat>
            </tbody>
        </table>
    </ui:repeat>

</p:outputPanel>

单击commandLink会弹出一个模型对话框,显示有关该单元格的详细信息。每个单元格代表特定日期的数据。问题是该对话框仅适用于最后一个选项卡。我可以单击每个表格单元格,它将显示当天的正确数据。当我切换到另一个选项卡并单击单元格时,populateExceptionPopup方法不会被调用,而是对话框显示最后一个从另一个选项卡中提取的数据。

我的bean是视图范围的。我不确定它是否与它有任何关系,但我正在使用CDI bean和注释。这是其中一个豆类。

@Named("reportTabBean")
@ConversationScoped
public class ReportTabBean implements Serializable {
    ...
}

0 个答案:

没有答案