Como obter elemento do JavaScript no JSF 2.0
-
22-09-2019 - |
Pergunta
Eu tenho código JSF como:
<h:inputText id="from" value="#{fromToMBean.fromName}"/>
Eu gostaria de obter este elemento do JavaScript por id (from
), mas não posso, porque em HTML gerado é j_idt8:from
Como posso obter esse elemento no por exemplo, jQuery? Existe alguma maneira de forçar o JSF2 a não alterar os IDs?
Solução
Você pode usar uma classe personalizada que você atribui apenas a este elemento e usar seletores CSS ou atribuir um ID ao formulário e obter o elemento com o ID formid:from
.
Outras dicas
Existe alguma maneira de forçar o JSF2 a não alterar os IDs?
Você pode definir prependId="false"
Dessa forma em HTML gerado, será a partir de no lugar de j_idt8: de.
ApresendID: Sinalizador indicando se este formulário deve ou não prender seu ID ao ID do descendente durante o processo de geração do cliente. Se esse sinalizador não estiver definido, o valor padrão será verdadeiro.
Como posso obter esse elemento no por exemplo, jQuery?
Você pode usar ancestorComponent:from
no jQuery para obter esse elemento.
Na realidade j_idt8 dentro j_idt8: de é um id de componente ancestral gerado automaticamente <h:inputText/>
por exemplo
<h:form id="form">
<h:inputText id="from" value="#{fromToMBean.fromName}"/>
</h:form>
Agora o ID gerado do texto de entrada seria forma: de
Se você não fornecer ID para um componente, o seu navegador gera isso dinamicamente. Portanto, não se esqueça de fornecer IDs aos componentes.
No JSF 1.2, você pode usar forceId = "true". Não tenho certeza se você pode usar t: entrada no JSF 2, mas deve poder. Então é o ID no HTML será o que você espera.
Para obter uma identificação completa para um componente, use objetos implícitos e suas propriedades, como #{cc.clientId}
e #{component.clientId}
. Fonte: Adquirir prefixo completo para um componente clientId dentro de contêineres de nomenclatura com JSF 2.0.
Você pode usar jQuery. Simplesmente, use um seletor que defina o texto que ele deve contém. Algo assim:
$( "input[name*='from']" )
'*=' é usado para dizer que o atributo de nome contém alguma string. Também existem '~=' com significado semelhante.
Para explicações e exemplos detalhados, visite http://api.jquery.com/attribute-contains-selector/