我创建了一个 JSF 复合组件来扩展 h:inputBox
<p class="label clear">
<label for="#{cc.attrs.id}" class="">
#{cc.attrs.label}:
</label>
</p>
<p>
<h:inputText id="#{cc.attrs.id}" value="#{cc.attrs.value}"
size="#{cc.attrs.size}" />
<ui:fragment rendered="#{cc.attrs.optional eq 'optional'}">
<span class="optional">Optional</span>
</ui:fragment>
</p>
要使用此组件..
<my:inputText id="firstName" label="First Name" value="#{nameTO.firstName}"/>
当此组件在浏览器上呈现时,ID 的格式为“firstName:firstName”。
<input type="text" value="" name="firstName:firstName" id="firstName:firstName" gtbfieldid="3028">
这是 JSF 2.0 模板的标准命名约定吗?我在 JSF 1.2 Facelets 模板中没有得到这个。
有什么方法可以将 ID 生成为“firstName”而不是“firstName:firstName”
最佳答案
JSF 2.0 复合组件与 JSF 1.x/2.x Facelets 模板不同。
复合组件也有自己的 ID。您基本上是在复合组件的实现中在组件上重用它。您可能需要考虑为实现中的组件添加或重命名另一个 ID 属性。例如。
<my:inputText name="firstName" label="First Name" value="#{nameTO.firstName}" />
和
<h:inputText id="#{cc.attrs.name}">
然而它最终会变成
id="ccId:firstName"
在 HTML 中,其中 ccId
是固定的或自动生成的 id
的 my:inputText
.你也可以把它放在一边并使用<h:inputText id="input">
最终为
id="firstName:input"
在 HTML 中。
关于JSF 复合组件 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4616291/