这是我的复合组件:
<composite:interface>
<composite:attribute name="attr1" />
<composite:clientBehavior name="xyz" event="valueChange" targets="chkbox" />
</composite:interface>
<composite:implementation>
<h:panelGrid>
<h:panelGroup>
<h:selectBooleanCheckbox id="chkbox"
value="#{cc.attrs.attr1}">
</h:selectBooleanCheckbox>
</h:panelGroup>
</h:panelGrid>
</composite:implementation>
我的页面:
<h:form id="myForm">
<cc:myComp attr1="#{myBean.someAttr}">
<f:ajax render="myform:grid1" event="xyz" listener="{myBean.listenerMethod}"/>
</cc:myComp>
<h:panelGrid id="grid1">
<h:panelGroup>
<h:inputTextarea id="rationale" rows="4" cols="70"
value="#{myBean.rationale}" />
</h:panelGroup>
</h:panelGrid>
</h:form>
我收到以下错误:
<f:ajax>
包含一个未知的id'myForm:grid1' - 无法在组件chkbox的上下文中找到它
如果我从代码中删除render="myform:grid1"
,则ajax调用正常。基本上从我的复合组件我不能引用另一个OUTSIDE组件。这是怎么造成的,我该如何解决?
答案 0 :(得分:5)
<f:ajax render="myform:grid1">
任何不以NamingContainer
分隔符开头的客户端ID(在您的情况下为:
)都与最近的NamingContainer
父级相关。最接近的NamingContainer
父级在您的特定情况下是复合组件本身。因此,此构造基本上是在寻找具有相对于复合组件的完整客户端ID myform:XXX:myform:grid1
的组件,其中XXX
是复合组件的自动生成ID。但是,没有此完整客户端ID的组件。
假设面板网格的完整客户端ID确实是myform:grid1
(即当您在浏览器中打开页面时,右键单击查看源,您确实看到{{1}那么你应该把它作为一个绝对的客户端ID,而不是在前面添加<table id="myform:grid1">
分隔符:
NamingContainer