Domanda
ho creato un componente composito JSF estendere 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>
Per utilizzare questo componente ..
<my:inputText id="firstName" label="First Name" value="#{nameTO.firstName}"/>
Quando questa componente viene eseguito il rendering del browser, l'ID è del formato. "Nome: firstName"
<input type="text" value="" name="firstName:firstName" id="firstName:firstName" gtbfieldid="3028">
Si tratta di una convenzione di denominazione standard con i modelli JSF 2.0? Non ho avuto questo con JSF 1.2 Facelets modelli. C'è un modo per generare l'ID come solo "firstName" al posto di "Nome: firstName"
Soluzione
Un JSF 2.0 componente composito non è la stessa di un JSF 1.x / 2.x Facelets modello.
Il componente composito ha un proprio ID pure. Stai fondamentalmente riutilizzo dei componenti per l'attuazione della componente composito. Si può prendere in considerazione per aggiungere o rinominare un altro attributo ID per i componenti per l'attuazione. Per es.
<my:inputText name="firstName" label="First Name" value="#{nameTO.firstName}" />
con
<h:inputText id="#{cc.attrs.name}">
Sarà comunque finire come id="ccId:firstName"
in HTML dove ccId
è o il id
fisso o generata automaticamente di my:inputText
. Si può anche semplicemente lasciare via e l'uso
<h:inputText id="input">
Il che finisce come id="firstName:input"
in HTML.