Eu estou desenvolvendo uma pequena aplicação utilizando JSF e estou com uma pequena dúvida. Eu possuo um JavaBean com 3 propriedades (id, nome e endereço). Eu gostaria de entrar com os dados no formulário e ao submeter a página eu gostaria que me JavaBean fosse populado automaticamente. É possível fazer isto ou eu devo criar um método get/set para todas as minhas propriedades na classe Service e setá-los manualmente no bean?
Olá Ricardo, uma das grandes facilidades do jsf é justamente fazer esse povoamento de forma automatica. Vou considerar que esse seu objeto é referente a uma pessoa, mas isso nao importa, é só mesmo para facilitar o exemplo.
basta colocar nos seus inputs assim:
Nesse exemplo estou supondo que voce tenha um managed bean registrado com o nome “ManagedBeanName” e nele voce tem um get e um set para um objeto pessoa e esse objeto pessoa tem um atributo chamado endereço (e também tem seus gets e sets).
O valor que voce colocar nesse input será automaticamente setado no atributo endereço do objeto pessoa do seu managed bean. Aí voce vai aplicando o mesmo esquema para os demais campos, e no final das contas o seu objeto pessoa vai estar totalmente populado sem voce precisar chamar nenhum set diretamente.
Espero que tenha ajudado.
R
RicardoLuis
Pois então gilliard_santos, eu estou fazendo da seguinte forma:
E a classe de acesso à camada web (ServiceManager.java) está da seguinte forma:
publicclassUserContactForm{/** Objeto que armazena os dados do contato. */privateUserContactuserContact;publicStringsave(){System.out.println(userContact.getUserContactName());System.out.println(userContact.getUserContactAddress());System.out.println(userContact.getUserContactBirthday());// this.serviceManager.save(userContact);return"success";}// Finaliza o método save./** * Retorna o objeto que armazena os dados do contato. * * @return Objeto que armazena os dados do contato. */publicUserContactgetUserContact(){returnuserContact;}// Finaliza o método getUserContact./** * Seta o objeto que armazena os dados do contato. * * @param userContact Seta o objeto que armazena os dados do contato. */publicvoidsetUserContact(UserContactuserContact){this.userContact=userContact;}// Finaliza o método setUserContact.}// Finaliza a classe UserContactForm.
Porém ao efetuar uma chamada ao método save os dados são todos impressos como null, ou seja, os dados não estão sendo setados em meu bean.
Você conseguiu visualizar o que estou fazendo de errado?
Alguém possui mais alguma sugestão?
gilliard_santos
coloque um h:messages na sua pagina para ver se nao esta dando nenhum erro de validacao/conversao (apesar que isso geralmente nem deixaria a execucao chegar na sua action).
faça esse teste e veja se aparece algum erro.
R
RicardoLuis
Não foi emitida nenhuma mensagem de erro.
gilliard_santos
Opa, acho que é algo que eu nao tinha visto (preguiça de usar a barra de rolagem hehehe, foi mal)…
tira esse immediate=“true” dos teus commandButtons.
R
RicardoLuis
Olá, ao que me parece agora funcionou sim, mas estou tendo problemas agora com a conversão de tipos.
E o objeto userContactBirthday é do tipo Calendar.
E no formulário eu entro com a data da seguinte forma: 14/11/2006
Alguma sugestão de como solucionar o problema?
gilliard_santos
esse f:convertDateTime converte a string q vc deu entrada para o tipo java.util.Date. Se voce quiser mesmo utilizar o tipo calendar vai ter que fazer um conversor próprio. Ou entao, uma alternativa mais simples é voce mudar o tipo do seu atributo para java.util.Date