Jsf 在f:ajax渲染中引用复合组件ID
我正在编写一个复合组件,用于包装输入元素,并使用“可选字段”名称和下面的h:message元素对其进行扩充。 以下是组件(在input.xhtml文件中): 我试过使用Jsf 在f:ajax渲染中引用复合组件ID,jsf,composite-component,clientid,ajax-update,Jsf,Composite Component,Clientid,Ajax Update,我正在编写一个复合组件,用于包装输入元素,并使用“可选字段”名称和下面的h:message元素对其进行扩充。 以下是组件(在input.xhtml文件中): 我试过使用f1:ii1,:f1:ii1,但没有用。当我使用msgId或:f1:ii1:msgId时,它会工作。有人知道为什么吗 我使用的是Mojarra 2.1.3 这是因为复合组件本身不会向HTML呈现任何内容。只有它的子项被呈现为HTML。生成的HTML输出中不存在ID为f1:i11的任何HTML元素。在浏览器中打开页面,右键单击并查看
f1:ii1
,:f1:ii1
,但没有用。当我使用msgId
或:f1:ii1:msgId
时,它会工作。有人知道为什么吗
我使用的是Mojarra 2.1.3
这是因为复合组件本身不会向HTML呈现任何内容。只有它的子项被呈现为HTML。生成的HTML输出中不存在ID为f1:i11的任何HTML元素。在浏览器中打开页面,右键单击并查看源代码。你自己看看里面。没有这样的ID元素。JavaScript/Ajax遇到了完全相同的问题。它找不到要更新的元素 要解决这个问题,您需要将整个复合体包装在HTML
或
中,并为其分配一个基本打印的ID{cc.clientId}
...
然后,您可以按如下方式引用它:
<my:input id="foo" />
...
<f:ajax ... render="foo" />
...
您甚至可以引用特定的复合构件子构件
<f:ajax ... render="foo:inputId" />
另见:
...
<h:outputLabel styleClass="sectionBody" for="i1"
value="Input 1"></h:outputLabel>
<my:input id="ii1">
<h:inputText id="i1" size="20" maxlength="20" tabindex="0"
required="true" label="Input 1">
<f:ajax listener="#{myBean.checkInput1}"
event="blur"
render="ii1"/>
</h:inputText>
</my:input>
...
malformedXML: During update: f1:ii1 not found
<cc:implementation>
<div id="#{cc.clientId}">
...
</div>
</cc:implementation>
<my:input id="foo" />
...
<f:ajax ... render="foo" />
<f:ajax ... render="foo:inputId" />