Olá estou com uma dúvida, eu adicionei um comboBox na tela e queria que sempre que fosse mudando o campo selecionado ele chamasse um método. Eu pensei em chamar o método direto no onChange do combo, mas ele aceita passagem de parametros e não chamada de metodos.
Para métodos é usada a tag a4j “http://richfaces.org/a4j”, só que todo exemplo que eu encontro usa o re-Render, e na verdade o que eu quero é que ele chame um método na classe java já mapeada, para fazer verificações do texto selecionado no ComboBox e a partir daí realizar alguma função, dependendo do valor.
Se alguém souber uma apostila ou livro para iniciante, eu agradeço também.
Olá estou com uma dúvida, eu adicionei um comboBox na tela e queria que sempre que fosse mudando o campo selecionado ele chamasse um método. Eu pensei em chamar o método direto no onChange do combo, mas ele aceita passagem de parametros e não chamada de metodos.
Para métodos é usada a tag a4j “http://richfaces.org/a4j”, só que todo exemplo que eu encontro usa o re-Render, e na verdade o que eu quero é que ele chame um método na classe java já mapeada, para fazer verificações do texto selecionado no ComboBox e a partir daí realizar alguma função, dependendo do valor.
Se alguém souber uma apostila ou livro para iniciante, eu agradeço também.
Olá,
O seu combo é do proprio JSF ou o do RichFaces?
A combo do RichFaces possui a propriedade “valueChangeListener”, onde voce pode chamar o seu método que será executado sempre que o valor da combo for alterado. A combo do JSF tambem possui essa propriedade.
Outra forma que voce pode fazer é, dentro da tag da sua compo, usar o a4j:support, para chamar o metodo quando ocorrer o evento change:
eu posso só usar o método, e não colocar nada no reRender? E no meu método, eu bloquearia algum textBox da tela por exemplo.
Obrigada pela ajuda.
Z
Zabimaru
Olá tudo bem,
Bem, pelo que eu entendi vc gostaria de chamar um método ao realizar o evento onchange e desabilitar ou deixar readonly um campo texto, vc pode fazer isso via bean colocando um atributo no seu textBox.
<h:inputText readonly="#{seubean.algumAtributoBoleano}"> ou <h:inputText disabled="#{seubean.algumAtributoBoleano}">
So que para ele fica desse modo, vc precisa dar um refresh na página ou utilizar o reRender para renderizar ele do modo que deseja.
qqr coisa posta ai
alias
Talita_a:
O “valueChangeListener”, eu posso chamar direto um metodo da minha classe java?
eu posso só usar o método, e não colocar nada no reRender? E no meu método, eu bloquearia algum textBox da tela por exemplo.
Obrigada pela ajuda.
Sim, para as duas perguntas.
O valueChangeListener serve justamente para isso, para invocar um metodo do seu managed-bean sempre que o valor do componente for alterado. Vai ficar algo como:
A mesma coisa caso voce esteja usando o h:selectOneMenu
Quanto ao a4j:support, coloquei o reRender pra ilustrar, mas ele nao é obrigatorio nao.
T
Talita_a
Obrigada alias e Zabimaru, estou entendo como funciona a chamada de metodo agora.
Só uma dúvida o reRender serve apenas para redenrizar um componente ou funciona para toda a pagina.
Obrigada pela ajuda.
alias
Talita_a:
Obrigada alias e Zabimaru, estou entendo como funciona a chamada de metodo agora.
Só uma dúvida o reRender serve apenas para redenrizar um componente ou funciona para toda a pagina.
Obrigada pela ajuda.
Por nada. Caso funcione aí com essas dicas coloca um RESOLVIDO no titulo do topico, para outros que porventura tenham o mesmo problema nao perderem tempo
Quanto à pergunta, o reRender serve APENAS para o componente que voce especificar lá. Por exemplo, voce criou na sua pagina um <h:inputText> e informou pra ele o id “teste” (<h:inputText id=“teste”> ), entao voce vai passar no reRender o id desse componente (<a4j:algumacoisa reRender=“teste”> ). Apenas ele será renderizado novamente
E caso queira renderizar varios componentes (mas nao a pagina toda), pode usar o reRender tambem, apenas separe os ids por virgulas (<a4j:algumacoisa reRender=“componente1, componente2, componente3…”> )
T
Talita_a
Olá…
Adicionei ao meu comboBox o evento:
<rich:comboBox valueChangeListener="#{cadastroInicial.teste}"
defaultLabel=“Escolha o Sexo”>
Mas num acontece nada, eu tenho q adicionar algum listner para que a ação aconteça. Ou algum post back? Pq não faz nada na tela.
Obrigada pela ajuda.
T
Talita_a
o meu comboBox está configurado assim
<rich:comboBox defaultLabel=“Escolha o Tipo”
enableManualInput=“false”
valueChangeListener="#{cadastroInicial.teste}">
<f:selectItem itemValue=“Médico”/>
<f:selectItem itemValue=“Atendente”/>
<f:selectItem itemValue=“Ortopedia Tecnica”/>
<f:selectItem itemValue=“Clinica de Fisioterapia”/>
</rich:comboBox>
Gostaria de saber se por eu estar definindo os nomes no ItemValue, é por isso que o valueChangeListener não funciona. Tendo que usar o value mesmo e fazendo referência a uma lista de nomes na minha classe basica que teria esse valores contigos em itemValue.
Obrigada pela ajuda
alias
Hum…creio que me esqueci de um detalhe e peço desculpas.
O seu metodo “teste” (o metodo que voce vai colocar valueChangeListener), deve ter retorno void, como está, e ter como parametro javax.faces.event.ValueChangeEvent
Entao ficaria aí…
public void teste(javax.faces.event.ValueChangeEvent event){
....
}
Está na especificação do componente (docs do RichFaces) que esse metodo deve seguir essa estrutura…talvez tenha sido isso, teste aí…ou corra para o a4j:support
T
Talita_a
Olá, alterei o método teste, e adicionei um parametro para o value do comboBox, por que li que esse método valueChangeListner verifica se o valor do combo foi alterado. Mas mesmo assim não funciona.
Ele está populando o comboBoc corretamente, com os valores que eu passei nesse List: cadastroInicial.selectItems.
Segue abaixo o comboBox,e depois o método teste.
<rich:comboBox defaultLabel=“Escolha o Tipo”
enableManualInput=“false”
value="#{cadastroInicial.selectedItem}"
valueChangeListener="#{cadastroInicial.teste}">