JSF动态绑定命令按钮
我有一个动态构建选项卡的JSF页面。在每个选项卡中都有一些输入字段和一个命令按钮。在生成选项卡时,字段和按钮是动态生成的。当我向命令按钮添加绑定属性时,一个选项卡中只生成一个按钮。每个选项卡中都应该有一个命令按钮。当我删除binding属性时,所有按钮都在那里,但没有进行必要的验证。如何为循环中创建的每个命令按钮添加唯一的绑定值 下面的所有代码都在一个循环中,该循环在选项卡视图中生成选项卡JSF动态绑定命令按钮,jsf,primefaces,Jsf,Primefaces,我有一个动态构建选项卡的JSF页面。在每个选项卡中都有一些输入字段和一个命令按钮。在生成选项卡时,字段和按钮是动态生成的。当我向命令按钮添加绑定属性时,一个选项卡中只生成一个按钮。每个选项卡中都应该有一个命令按钮。当我删除binding属性时,所有按钮都在那里,但没有进行必要的验证。如何为循环中创建的每个命令按钮添加唯一的绑定值 下面的所有代码都在一个循环中,该循环在选项卡视图中生成选项卡 <ui:repeat value="#{cc.attrs.dataTableTemplate
<ui:repeat value="#{cc.attrs.dataTableTemplate.columns}" var="column">
<p:outputLabel styleClass="outputLabel" value="#{column.heading}"
for="inputtext" rendered="#{column.editable}"/>
<p:inputText value="#{cc.attrs.dataTableTemplate.collectorValue[column.name]}"
rendered="#{column.editable}"
id="inputtext" required="#{not empty param[add.clientId]}"/>
<div class="clear"> </div>
</ui:repeat>
<p:commandButton styleClass="commandButton"
binding="#{add}"
value="add"
update="pnl_codetable @parent"
title="Add">
<p:collector value="#{cc.attrs.dataTableTemplate.collectorValue}"
addTo="#{cc.attrs.pageBean.getDataTableList(
cc.attrs.dataTableTemplate.tableListName)}" />
</p:commandButton>
下面是创建选项卡并使用maintenance_code标记调用上述代码的代码
<p:accordionPanel id="pnl_accord_codetables" dynamic="true" cache="false">
<p:ajax event="tabChange" listener="#{pc_Maintenence.onTabChange}"/>
<c:forEach items="#{pc_Maintenence.codeMaintenenceTables}" var="codetable">
<p:tab title="#{codetable.tableName}">
<util:maintenence_code pageBean="#{pc_Maintenence}" dataTableTemplate="#{codetable}"/>
</p:tab>
</c:forEach>
</p:accordionPanel>
绑定属性基本上是视图范围。不能将同一视图中的多个组件物理绑定到同一视图范围的变量。它只能引用一个组件。在您的例子中,基本上每个组件在设置该属性时都会相互覆盖,这样您最终只能看到最后一个组件 您不清楚如何创建选项卡,但是您应该以某种方式在binding属性中使用的变量中包含选项卡标识符。也许是这样的
faces config.xml
:
<managed-bean>
<managed-bean-name>components</managed-bean-name>
<managed-bean-class>java.util.HashMap</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
我添加了构建选项卡的代码。这也是我们可以考虑的范围。非常感谢你的努力。将它绑定到组合本身是个好主意。我在排序方面遇到了与命令按钮相同的问题。排序正在抛出找不到属性的错误。它正在查找上次生成的datatable的tables列表中的类的属性。当我在选项卡之间切换或点击命令按钮时,会发生此错误。是否有一种方法可以将排序绑定到组合本身。不知道如何解决这个问题。谢谢你的回答。第二个解决方案非常好。
<c:set var="buttonId" value="add_#{someTabId}" />
...
<p:inputText ... required="#{not empty param[components[buttonId].clientId]}" />
...
<p:commandButton binding="#{components[buttonId]}" ... />
<cc:interface componentType="myComposite">
...
<p:inputText ... required="#{not empty param[cc.add.clientId]}" />
...
<p:commandButton binding="#{cc.add}" ... />
@FacesComponent("myComposite")
public class MyComposite extends UINamingContainer {
private UICommand add;
// +getter +setter
}