Jsf 2 如何使用JSF EL表达式在param中迭代变量

Jsf 2 如何使用JSF EL表达式在param中迭代变量,jsf-2,primefaces,el,Jsf 2,Primefaces,El,我有一个PrimeFaces组件,其中包含数量可变的面板。每个面板包含许多衍生组件。我有一个删除按钮包含在每个面板内,以允许删除。我在dataGrid之外还有一个add按钮。我没有在按钮上使用immediate=“true”,而是找到了如何设置每个面板中每个组件所需的属性 例如: required="#{empty param['vehicleGrid:0:btnDelete'] and empty param['btnAdd']}". 对于dataGrid中的每个delete按钮和add按

我有一个PrimeFaces
组件,其中包含数量可变的面板。每个面板包含许多衍生组件。我有一个删除按钮包含在每个面板内,以允许删除。我在dataGrid之外还有一个add按钮。我没有在按钮上使用
immediate=“true”
,而是找到了如何设置每个面板中每个组件所需的属性

例如:

required="#{empty param['vehicleGrid:0:btnDelete'] and empty param['btnAdd']}". 
对于dataGrid中的每个delete按钮和add按钮,忽略组件验证


如果dataGrid内部有一个面板,但它仅引用第一个面板,则此操作有效。我需要动态检查每个面板。也许我不需要从标记页面查看它,也许我需要用Java术语查看它,因为param是一个
映射

将delete按钮组件绑定到视图并使用它


...

这样,就可以在参数映射中查找正确的客户端ID,而无需在参数映射上进行迭代。

Ok,这几乎奏效了!我可以看到删除按钮所在的面板绕过了该面板中的验证,但我如何忽略所有面板?假设我添加了3个空面板,然后尝试删除最后一个面板。它不会这样做,因为前两个面板的验证已触发。在这种情况下,一个面板中的删除按钮将忽略所有面板中的验证?设置
process=“@this”
而不是(默认)
process=“@form”
。哦,等等。。。通过这种方式,您完全不需要
required
条件,只需坚持
required=“this”
:)嗯,我最初是这样做的,直到我在视图和支持bean之间遇到数据问题。例如,我有3辆车,每辆车都有一个年份属性。我分别进入2008年、2010年和2012年。然后我删除第一辆车。我看到的不是2010年和2012年,而是2008年和2012年。支持列表具有正确的数据,但由于某些原因,显示了先前的数据。更糟糕的是,如果我添加了一辆新车或进行了更新,“幽灵”数据只是覆盖了支持列表。这让我发疯,直到另一张海报建议简化代码。只是为了好玩,我又添加了流程=“@this”,甚至添加了p:ajax更新=“@this”,到目前为止一切都很好。3天前,当我手动刷新屏幕时,这不起作用,值会改变。需要ajax标记,以便按钮单击不会清空任何新值的值。
<h:inputText ... required="#{empty param[deleteButton.clientId]}" />
...
<h:commandButton binding="#{deleteButton}" ... />