有没有办法在设置参数时使用变量来定义支持 bean。在我们的应用程序中,我们允许对表中的大多数列(如果不是所有列)使用多个过滤条件。我们开发了一段代码,将其复制到实现此功能的每个列定义中。列定义示例:
<p:column styleClass="dataTableColumnAlignLeft" id="c0"
style="width: 200px" exportable="false">
<ui:include src="/html/common/dataTableColumnHeader5_2.xhtml">
<ui:param name="programId" value="backingBeanName" />
<ui:param name="fieldName" value="depositName" />
<ui:param name="displayLessThanFilter" value="false" />
<... several more ui:include parameters />
</ui:include>
<h:outputText value="#{cashReceiptsDeposList.depositName}" />
</p:column>
包含的代码构建列标题并具有用于对列进行排序和显示用户帮助文本的命令按钮,所有这些都可以正常工作。但它也包含一个命令按钮,该按钮执行一个对话框以从用户那里获取每列的多个过滤参数。这在 PF 3.2 中运行良好,但在转换为 5.2 时,它停止了工作。在查看文档时,我发现对话框不应包含在表定义中,因此我们试图将对话框移到表定义之外。然而,这意味着为使用 ui:include 引入的代码设置的参数对对话框不可见。我可以通过设置特定于被过滤到支持 bean 的列的参数来克服这个问题:
<p:commandLink tabindex="-1" rendered="#{displayFilters}"
update=":filterDialogForm:filterDialog"
oncomplete="PF('filterDialog').show();" id="#{fieldName}FPL"
title="#{label}">
<f:setPropertyActionListener target="#{backingBeanName.label}" value="#{label}" />
<f:setPropertyActionListener target="#{backingBeanName.fieldName}" value="#{fieldName}" />
<f:setPropertyActionListener target="#{backingBeanName.displayContainsFilter}" value="#{displayContainsFilter}" />
<p:graphicImage rendered="#{displayFilters}" tabindex="-1"
style="border:0px;" width="20" height="20"
value='#{empty filtersHandler..../>
</p:commandLink>
然后对话框可以获取这些支持 bean 元素的内容,以便知道要请求哪些过滤器。如果我可以将 bean 名称指定为变量,我只需要在片段中复制的一个副本,但如果我必须输入实际的 bean 名称,我将需要为每个包含表的页面创建一个副本,超过 1000现在。我尝试了几种使用变量的方法,例如 target="#{#{programId}.field}",但到目前为止,它们要么无法解析,要么被解释为静态 bean 名称而不是变量。是否可以使用变量指定 bean 名称?
环境:PF 5.2、jBoss 7.1.3、jdk-7、jsf 2.2