我创建了一个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”
答案 0 :(得分:9)
JSF 2.0复合组件与JSF 1.x / 2.x Facelets模板不同。
复合组件也有自己的ID。您基本上是在复合组件实现中的组件上重用它。您可能需要考虑为实现中的组件添加或重命名另一个ID属性。 E.g。
<my:inputText name="firstName" label="First Name" value="#{nameTO.firstName}" />
与
<h:inputText id="#{cc.attrs.name}">
然而,它最终会以id="ccId:firstName"
格式显示在ccId
中,id
是my:inputText
的固定或自动生成<h:inputText id="input">
。您也可以将其遗弃并使用
id="firstName:input"
最终以HTML中的{{1}}结束。