Pergunta
Eu criei um componente composto JSF para estender 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>
Para usar este componente ..
<my:inputText id="firstName" label="First Name" value="#{nameTO.firstName}"/>
Quando esse componente é renderizado no navegador, o ID é do formato "FirstName: FirstName".
<input type="text" value="" name="firstName:firstName" id="firstName:firstName" gtbfieldid="3028">
Esta é uma convenção de nomenclatura padrão com modelos JSF 2.0? Eu não entendi isso com os modelos de facelas JSF 1.2. Existe alguma maneira de gerar o ID como apenas "primeiro nome" em vez de "primeiro nome: primeiro nome"
Solução
Um componente composto JSF 2.0 não é o mesmo que um modelo de facelets JSF 1.x/2.x.
O componente composto também tem seu próprio ID. Você está basicamente reutilizando -o nos componentes na implementação do componente composto. Você pode considerar adicionar ou renomear outro atributo de identificação para os componentes da implementação. Por exemplo
<my:inputText name="firstName" label="First Name" value="#{nameTO.firstName}" />
com
<h:inputText id="#{cc.attrs.name}">
No entanto, acabará como id="ccId:firstName"
em html onde ccId
é o fixo ou autogenerado id
do my:inputText
. Você também pode deixar embora e usar
<h:inputText id="input">
Que acaba como id="firstName:input"
em html.