Considere a seguinte página JSF: Sabendo que a classe MeuBean está configurada como @ManagedBean e possui os métodos getValor, setValor e enviar, analise as alternativas sobre o comportamento da aplicação e assinale a correta.
- A)A tag <h:inputText> está configurada incorretamente, pois deveria utilizar a expressão #{meuBean.getValor} para funcionar corretamente.
Errada, porque em JSF o correto e usar #{meuBean.valor}, e o framework chama getValor e setValor automaticamente, sem precisar escrever getValor na expressao.
- B)O JSF garante que, ao clicar em "Enviar", o ciclo de vida do JSF atualizará o valor do campo de texto no atributo do bean antes de chamar o método enviar.
Certa, pois o ciclo de vida do JSF atualiza o atributo do bean antes de executar o metodo de acao do botao, desde que a validacao e a conversao passem.
- C)O método enviar no bean deve retornar um objeto String correspondente a uma navegação explícita. Caso contrário, ocorrerá um erro em tempo de execução.
Errada, porque o metodo de acao pode retornar String ou void, e nem sempre precisa indicar navegacao explicita para funcionar.
- D)Ao clicar no botão "Enviar", o método enviar será chamado diretamente, mas o valor digitado no campo de texto não será populado no atributo correspondente do bean.
Errada, porque o valor digitado no campo e sim copiado para o atributo do bean durante a fase de atualizacao do modelo antes da chamada do metodo enviar.
Gabarito: B
No JSF, quando voce usa um campo de entrada ligado a um atributo do bean com #{meuBean.valor}, o framework faz o trabalho chato por voce: primeiro ele converte e valida o que foi digitado, e depois atualiza o modelo, isto e, chama o setter correspondente. So depois disso o metodo de acao do botao, como enviar, e executado. Essa ordem faz parte do ciclo de vida do JSF e e o ponto central da questao. Por isso, ao clicar em "Enviar", o valor digitado no inputText nao fica preso na tela nem some no limbo: ele e transferido para o atributo do bean antes da chamada da acao. Se estiver tudo certo com conversao e validacao, o JSF segue para a fase de Update Model Values e depois Invokes Application. A alternativa B esta correta justamente por descrever esse comportamento padrao. Em termos doutrinarios, o JSF foi desenhado para ser um framework baseado em componentes e em ciclo de vida gerenciado, onde o binding entre a interface e o bean acontece de forma automatica. E por isso que voce normalmente nao precisa setar valor manualmente no metodo enviar. Resumo prático: primeiro o JSF lê o campo, depois atualiza o bean, e so entao executa a acao do botao. Se voce lembrar dessa ordem, metade das questoes de JSF ja perde a forca.