我正在使用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 {
...
}