Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 当组件多次包含在同一页面中时,绑定失败_Jsf_Binding_Components - Fatal编程技术网

Jsf 当组件多次包含在同一页面中时,绑定失败

Jsf 当组件多次包含在同一页面中时,绑定失败,jsf,binding,components,Jsf,Binding,Components,我的情况如下: <p:selectBooleanCheckbox id="couponAgreement"> <h:panelGroup rendered="#{!couponAgreement.valid}"> 你可以用这个。它将相对于命名容器父级进行搜索。因此,如果您可以保证这些组件具有唯一的命名容器父级(例如,,,,等等),那么请执行以下操作: <h:someInput id="someInput" ... /> <h:someOutput ..

我的情况如下:

<p:selectBooleanCheckbox id="couponAgreement">
<h:panelGroup rendered="#{!couponAgreement.valid}">
你可以用这个。它将相对于命名容器父级进行搜索。因此,如果您可以保证这些组件具有唯一的命名容器父级(例如,
,等等),那么请执行以下操作:

<h:someInput id="someInput" ... />
<h:someOutput ... rendered="#{component.findComponent('someInput').valid}" />
而是将它绑定到一个唯一的密钥。让include/tagfile/composite需要一个
id
param/属性,然后使用
创建一个附加
id
的变量,以便最终将其用作请求范围映射的键

<c:set var="binding" value="binding_someInput_#{id}" />
<h:someInput id="#{id}" binding="#{requestScope[binding]}" ... />
<h:someOutput ... rendered="#{requestScope[binding].valid}" />

在一个设计合理的组合中,您通常已经拥有或最终需要它。

然后在EL
{component.clientId}
中。正如我所说,绑定不起作用,因为我多次包含它。。顺便说一句,我不需要ClientdComponents可以被唯一标识,如果包含在像
这样的命名容器中。有什么理由不想通过ajax更新,在支持bean中设置一些布尔值,使用它作为你的
渲染的
条件?@Tiny我用一个子视图标记包围了include标记,但是它有相同的结果:对于这个详细的例子,只有最后一个复选框是shownthanks!似乎“cc.findComponent('couponAgreement').valid”也能完成这项工作,您认为呢?include似乎被当作cc-contextYou处理,您确实可以这样做。
<h:someInput binding="#{someInput}" ... />
<h:someOutput ... rendered="#{someInput.valid}" />
<c:set var="binding" value="binding_someInput_#{id}" />
<h:someInput id="#{id}" binding="#{requestScope[binding]}" ... />
<h:someOutput ... rendered="#{requestScope[binding].valid}" />
<managed-bean>
    <description>Holder of all component bindings.</description>
    <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>
<h:someInput id="#{id}" binding="#{components[id]}" ... />
<h:someOutput ... rendered="#{components[id].valid}" />
<cc:interface componentType="someComposite">
    ...
</cc:interface>
<cc:implementation>
    <h:someInput binding="#{cc.someInput}" ... />
    <h:someOutput ... rendered="#{cc.someInput.valid}" />
</cc:implementation>
@FacesComponent("someComposite")
public class SomeComposite extends UINamingContainer {

    private UIInput someInput; // +getter+setter

    // ...
}