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"

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top