OLa pessoal sou iniciante em java e seguindo o tutorial JSF aki do site
e a apostila 28 da caelum, tentei juntar os 2.
Na pagina de insercao ele seta os campos da classe agenda e chama o metodo:
<h:commandButton value=“Inserir” action="#{agenda.inserir}"/>
Mas com o hibernate as coisas mudaram, n tenho mais o inserir dentro da classe agenda
e sim dentro de um Dao generico…porem nao posso apenas chamar o Dao e dar
adiciona() pois ele pede um objeto agenda…como faco pra finalizar essa insercao?
Se n der pra entender eu posto os arquivos
Obrigado pessoal.
Lembre-se, você está trabalhando com mvc. Portanto, vc terá que criar uma classe Control, no caso, ActAgenda, vc terá que mapear essa classe no facesConfig.xml criando o bean, com isso, através do bean vc consegue chamar a classe.
Bom, no método inserir da classe actAgenta, você terá que fazer a validação dos dados, e chamar o objeto Dao que fará a persistência no banco, de uma olhada no código abaixo:
Mas estou com um duvida, se ja tive que criar um Dao com um metodo adicionar
para fazer o save, porque fazer ma outra chamada inserir q chame a adicionar.
Nao poderia ser feito tudo no Dao?
orbigado!
Nao estou conseguindo passar o objeto Pessoa como parametro ali no AQUI.
Como faco para instanciar o pessoa que esta recebendo os valores pelo pessoa.nome dos inputs
Obrigado
Marky.Vasconcelos
Crie um handler
publicclassPessoaHandler(){privatefinalDaoFactorydaoFactory;privatefinalPessoapessoa;publicPessoagetPessoa(){returnpessoa;}publicPessoaHandler(){//Construtor vazio, o JSF não passa nenhum argumento ao instanciar ManagedBeans (Ou faz e eu não sei :p) this.daoFactory=newDaoFactory();//Ou o modo que você instancia essa classe }publicvoidadiciona(){this.daoFactory.beginTransaction();this.daoFactory.getPessoaDao().adiciona(pessoa);this.daoFactory.commit();}}
Para acessar os atributos da classe Pessoa é só colocar na expressão o caminho
Ao invés:
#{controle.nome}
use:
#{controle.pessoa.nome}
Herança não é uma boa ideia para um controlador.
felipeguerra
Você tem um atributo na classe Pessoa que possa ser herdado e passado como parâmeto?
J
jeanmarcel
Mark, me retorna o seguinte erro antes mesmo de acessar o arquivo de insercao.
É que ele não encontra a classe controle.contPessoa para instanciar.
Você tem que ter ela no faces-config
Na classe PessoaHandler declare o package que eu acho que é controle;
Na páginas JSF: (Arrumei uma parte depois você altera o resto)
//...
<h:inputTextvalue="#{pessoaHandler.pessoa.cidade}"/></td></tr><tr><td>Telefone:</td><td><h:inputTextvalue="#{pessoaHandler.pessoa.telefone}"/></td></tr></table><p><h:commandButtonvalue="Inserir"action="#{pessoaHandler.adicionar}"/><!-- note que o método adicionar é do Handler e não do Objeto pessoa --></p></h:form>
//...
J
jeanmarcel
mesmo assim ele diz nao encontrar o xxx.pessoa.nome, veja::
faces
o public contPessoa nao pode ser sem parametro pois sua o metodo q inicia sua classe esta como private, mesmo
mudando pra public gera um outro problema.
Creio q ele n esteja reconhecendo esse pessoa...
Obrigado hein
J
jeanmarcel
up
Marky.Vasconcelos
O JSF não aceita parametros para a inicialização
Você tem que ter um construtor publico e vazio.
Procure outro modo de instanciar a DaoFactory, Singleton por exemplo funcionaria, não é o mais indicado, mas você tem que deixar um construtor em branco.
E outra coisa
Em nome de classes sempre começe com letra maiuscula
para métodos e atributos começe com letra minuscula.
Isso não é uma regra mas é uma convenção que facilita a leitura do código por outros programadores.