Boa tarde pessoal.
Estou tentando salvar em banco através de um bean gerenciado utilizando primefaces, já fiz testes com as classes DAO e Util e tudo funciona normalmente.
O problema é que quando clico em salvar ele se quer executa o método adicionar do bean. O que estou fazendo de errado?
@ManagedBean@RequestScopedpublicclassAccountBean{/** * Creates a new instance of AccountBean */privateStringnome,dataNascimento;publicAccountBean(){}publicvoidadicionar(ActionEventactionEvent){Usuariousuario=newUsuario();usuario.setNome(nome);usuario.setDataNascimento(DataUtil.converteStringEmCalendar(dataNascimento,DataUtil.DATE));newUsuarioDao().adiciona(usuario);}publicStringgetNome(){returnnome;}publicvoidsetNome(Stringnome){this.nome=nome;}publicStringgetDataNascimento(){returndataNascimento;}publicvoidsetDataNascimento(StringdataNascimento){this.dataNascimento=dataNascimento;}}
Acho que um p:calendar não pode setar o valor em uma String, mas também não acho que esse seja o problema.
tmvolpato
tente assim
Onimatsu
Foi só desabilitar o ajax que funcionou obrigado e o calendário estava realmente com problema mas consegui fazer as conversões, valeu pela dica.
Apesar deste problema inicial estar resolvido tenho outra tela com erro similar, mas antes de postar quero ver se essa solução funciona também na outra tela por isso ainda vou deixar o tópico aberto.
Onimatsu
Mesma situação do anterior o commandButton não executa o método adicionar e não entra no Bean tentei desabilitar o ajax mas dessa vez não funcionou.
Alguém consegue identificar o erro?
Mesma situação do anterior o commandButton não executa o método adicionar e não entra no Bean tentei desabilitar o ajax mas dessa vez não funcionou.
Alguém consegue identificar o erro?
Já tentou tirar esse appendToBody?
Essa opção como true só traz problemas, a cada show() ele cria o html de novo pro dialog senão me engana, talvez o fato de duplicar pode estar gerando esse problema
[]'s
Onimatsu
Quando uso appendToBody="false" ele funciona e grava no banco, porém o dialog fica travado e cinza não é possível movimentar nem ao menos clicar nos botões. Testei o dialog a partir de um ui:composition só que continua do mesmo jeito.
Alguém têm alguma alternativa para resolver o travamento?
Nessa página eu tentei de tudo ajax="false" appendToBody="false" mudei o bean de Session para RequestEscoped e vice-versa e nada.
Porque essa página não entra no bean, ou seja, não acessa os métodos: preparaEntidade e adicionarRegistro? Não consigo entender porque não funciona.
Por favor, alguém pode me dar uma dica?
@ManagedBean@SessionScopedpublicclassManagerBean{privateList<Grupo>listaG;privateList<Registro>listaR;privateEntidadeentidade;privateGrupogrupo;privateRegistroregistro;/** * Creates a new instance of ManagerBean */publicManagerBean(){this.entidade=newEntidade();this.grupo=newGrupo();this.registro=newRegistro();}publicEntidadegetEntidade(){returnentidade;}publicvoidsetEntidade(Entidadeentidade){this.entidade=entidade;}publicGrupogetGrupo(){returngrupo;}publicvoidsetGrupo(Grupogrupo){this.grupo=grupo;}publicvoidpreparaEntidade(ActionEventactionEvent){this.entidade=newEntidade();}publicvoidadicionarRegistro(){this.registro.setTitulo(this.entidade.getTituloR());this.registro.setUrl(this.entidade.getUrl());this.registro.setUsuario(this.entidade.getUsuario());this.registro.setSenha(this.entidade.getSenha());this.registro.setDescricao(this.entidade.getDescricao());this.registro.setFk(this.grupo.getId());newRegistroDao().adiciona(registro);}publicList<Grupo>getListaG(){returnthis.listaG=newGrupoDao().getLista();}}
glaydsonarantes
O dialog precisa estar fora do form.
Onimatsu
Se eu fizer isso dá erro:“CommandButton : “j_idt49” must be inside a form element”
glaydsonarantes
Sim, coloque o form dentro do panelGrid.
Onimatsu
Eu tentei isso também não deu erro, mas, também não resolveu o problema do bean.
E o problema não é só nesse dialog o tieredMenu é bem mais simples que o dialog e nem por isso entra no bean. Veja:
Agora a página ficou com um comportamento diferente. Eu consegui resolver o problema do tieredMenu agora o bean executa o método preparaEntidade, no entanto, quando entra no dialog e clico no botão salvar o bean não executa o método adicionarRegistro.
Eu acho que existe alguma coisa que está bloqueando o método adicionarRegistro depois que eu chamo preparaEntidade, mas não sei exatamente o que seria. Alguém saberia me dizer?
1º) Tente no actionListener apenas managerBean.adicionarRegistro. Sem as ();
2º) Já tentou debug na primeira linha do método adicionarRegistro?
3º) Caso nenhum dos 2 acima funcionem, tente com um commandLink.
Onimatsu
1- Uma boa observação, mas já havia tentado isso.
2- Sim, é justamente pelo debug ou por prints que eu sei que ele não esta entrando no bean.
3- Eu tenho que usar commandButton por se tratar de uma caixa de dialog de confirmação “Save” e “Cancel”, mas só para testes usei o commandLink, entretanto, não tive resultados satisfatórios.
Acho que isso não têm mais nada a haver com a forma que os métodos são invocados e sim com a disposição dos formulários, listener que está esperando a resposta de outro método (seja lá qual for) ou o scoped que não pode ser Session, enfim várias teorias.
Agradeço a todos que estão ajudando e por favor, não parem de enviar sugestões.
leonhard32
Ja tentou usar o oncomplete ao invés do onclick? E o action ao invés do actionListener?