Gostaria de saber se usando JSF / RichFaces eu consigo esconder um <h:inputText/>.
O problema acontece, porque, eu tenho um formulário onde o primeiro campo é um selectItem. Dependendo da opção escolhida alguns campos serão ou não mostrados.
Minha dificuldade está em fazer isso sem dar submit na página. Alguém sabe como eu posso fazer isso ?
Alguém ideia ?
<h:selectOneMenu valueChangeListener="#{meuBean.meuMetodo}">
<f:selectItems value="#{meuBean.valores}" />
</h:selectOneMenu>
Método do Bean:
public void meuMetodo(ValueChangeEvent event) {
Long valor = (Long) event.getNewValue();
//verifica as condições e decide se renderiza o inputText ou não
}
Você pode usar a4j também, aí deve ser ActionEvent:
<h:selectOneMenu>
<f:selectItems value="#{meuBean.valores}" />
<a4j:support event="onchange" ajaxSingle="true" reRender="seuInputText" actionListener="#{meuBean.meuMetodo}" />
</h:selectOneMenu>
…imagino que no método dependendo do valor do combo você setava para true or false a renderização do inputText, a propriedade reRender trataria deixando de exibir o componente ou não.
Não testei nada aqui, mas acredito que isso possa ti ajudar, qualquer dúvida poste aí.
Abraços,
A segunda opção usando AJ4 , foi exatamente a forma que eu havia imaginado, porém não funciona em tempo de execução. Eu havia feito da mesma forma que você colocou, porém usando action ao inves de actionListener. Fiz o seu exemplo e nada acontece.
CAMPO OPERAÇÃO:
Obs: O Metodo AsController.searchAsTipoChamadoId que está sendo invocado no action do item acima é responsavel por setar true ou false para o atributo showFieldOp que está sendo usado no campo abaixo.
…daí no seu método AsController.searchAsTipoChamadoId que é responsável por setar true or false você seta a propriedade rendered do atributo “meuInputText”.
Bom, vou tentar testar aqui e ver se dessa forma funciona, lembro de ter feito algo parecido com um dataTable, mas naquele caso só o rendered igual você fez funcionou.
javascript não é feio rsrsrs
é uma possibilidade de vc tem de mudar algo sem precisar dar refresh na tela
outra opção seria usando ajax, usando binding não sei se consegue sem dar refresh
Acho que subestimei essa sua dúvida…rs…parecia ser simples mas “fritei” aqui…rs…
Bom, depois de tentar o que lhe sugeri e ver que não funcionou eu resolvi “apelar”, inseri um outputText e mandei imprimir a minha variável booleana, que informava se meu inputText seria renderizado ou não, e como esperado funcionava normalmente, agora porque o componente continuava sendo renderizado eu não sei explicar :oops:
O que eu fiz pra funcionar foi o seguinte:
Digo o mesmo. No inicio achei que seria “mamãozinho” e estou a tarde toda nisso.
Mas me diga, esse ultimo post funcionou ? Se funfar vou deixar assim por enquanto.
Tenho um prazo pra entregar o projeto e não posso ficar perdendo tempo nisso rs.
Feio ? Que nada, você não imagina o que eu cheguei a fazer. Só pra sentir o drama , pensei em usar até iframe rsrsrsrsrss
valew, qualquer novidade eu posto também
Vamos ver se alguma alma caridosa leia o post e nos ajude.
Falae lblanco blz?
Sim funcionou, com o reRender=“MEU_ID_DO_FORM” o meu inputText deixava de ser renderizado quando necessário, mas cuidado, isso pode dar problemas com os outros componentes do seu form…antes de implementar isso como definitivo, tente solucionar de outra forma, não gostei de ter que renderizar todo o form para esconder um campo apenas :?
Se tiver alguma dúvida ou conseguir outra solução, poste aqui por favor.
Faz tempo que a pergunta esta ai mas acho que vale a pena responder para outros terem a resposta tb…
Acho que faltou só colocar o atributo onchange=“submit()” no h:selectOneMenu.
Para mim funcionou assim!