Managed Bean

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?

&lt;h:form&gt; &lt;h:outputText value="Name"/&gt; &lt;p:inputText id="nome" value="#{accountBean.nome}"/&gt; <br></br> &lt;h:outputText value="Birthday"/&gt; &lt;p:calendar id="dataNascimento" value="#{accountBean.dataNascimento}" pattern="yyyy-MM-dd" showButtonPanel="false" navigator="true"/&gt; <br></br> &lt;p:commandButton id="salvar" value="Save" actionListener="#{accountBean.adicionar(actionEvent)}"/&gt; &lt;/h:form&gt;[code]@ManagedBean
@RequestScoped
public class AccountBean {

/**
 * Creates a new instance of AccountBean
 */
private String nome, dataNascimento;

public AccountBean() {
}

public void adicionar(ActionEvent actionEvent) {
    Usuario usuario = new Usuario();
    usuario.setNome(nome);
    usuario.setDataNascimento(DataUtil.converteStringEmCalendar(dataNascimento, DataUtil.DATE));
    new UsuarioDao().adiciona(usuario);
}

public String getNome() {
    return nome;
}

public void setNome(String nome) {
    this.nome = nome;
}

public String getDataNascimento() {
    return dataNascimento;
}

public void setDataNascimento(String dataNascimento) {
    this.dataNascimento = dataNascimento;
}

}[/code]

Não aparece nenhum erro no console?

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.

tente assim

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.

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?

&lt;h:body&gt; &lt;p:layout fullPage="true"&gt; &lt;p:layoutUnit position="west" size="275" header="Actions" collapsible="true"&gt; &lt;h:form&gt; &lt;p:tieredMenu&gt; &lt;p:menuitem oncomplete="criarGrupoDialog.show()" value="Create"/&gt; &lt;/p:tieredMenu&gt; &lt;/h:form&gt; &lt;/p:layoutUnit&gt; &lt;p:layoutUnit position="center"&gt; &lt;h:form id="formulario" prependId="false"&gt; &lt;p:dialog appendToBody="true" header="Create Group" widgetVar="criarGrupoDialog" resizable="false" showEffect="fade" hideEffect="fade" modal="true"&gt; &lt;h:panelGrid id="criarGrupoDisplay" columns="1" cellpadding="0" style="margin: 0 auto;"&gt; &lt;h:outputText value="Name"/&gt; &lt;h:inputText value="#{grupoBean.grupo.titulo}"/&gt; &lt;p:commandButton value="Save" actionListener="#{grupoBean.adicionar}" oncomplete="criarGrupoDialog.hide()"/&gt; &lt;p:commandButton value="Cancel" oncomplete="criarGrupoDialog.hide()"/&gt; &lt;/h:panelGrid&gt; &lt;/p:dialog&gt; &lt;/h:form&gt; &lt;/p:layoutUnit&gt; &lt;/p:layout&gt; &lt;/h:body&gt;[code]@RequestScoped
public class GrupoBean {

private Grupo grupo;

public GrupoBean() {
    this.grupo = new Grupo();
}

public List&lt;Grupo&gt; getLista() {
    return new GrupoDao().getLista();
}

public void adicionar() {
    new GrupoDao().adiciona(grupo);
}

public Grupo getGrupo() {
    return grupo;
}

public void setGrupo(Grupo grupo) {
    this.grupo = grupo;
}

}[/code]

[quote=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?

&lt;h:body&gt; &lt;p:layout fullPage="true"&gt; &lt;p:layoutUnit position="west" size="275" header="Actions" collapsible="true"&gt; &lt;h:form&gt; &lt;p:tieredMenu&gt; &lt;p:menuitem oncomplete="criarGrupoDialog.show()" value="Create"/&gt; &lt;/p:tieredMenu&gt; &lt;/h:form&gt; &lt;/p:layoutUnit&gt; &lt;p:layoutUnit position="center"&gt; &lt;h:form id="formulario" prependId="false"&gt; &lt;p:dialog appendToBody="true" header="Create Group" widgetVar="criarGrupoDialog" resizable="false" showEffect="fade" hideEffect="fade" modal="true"&gt; &lt;h:panelGrid id="criarGrupoDisplay" columns="1" cellpadding="0" style="margin: 0 auto;"&gt; &lt;h:outputText value="Name"/&gt; &lt;h:inputText value="#{grupoBean.grupo.titulo}"/&gt; &lt;p:commandButton value="Save" actionListener="#{grupoBean.adicionar}" oncomplete="criarGrupoDialog.hide()"/&gt; &lt;p:commandButton value="Cancel" oncomplete="criarGrupoDialog.hide()"/&gt; &lt;/h:panelGrid&gt; &lt;/p:dialog&gt; &lt;/h:form&gt; &lt;/p:layoutUnit&gt; &lt;/p:layout&gt; &lt;/h:body&gt;[code]@RequestScoped
public class GrupoBean {

private Grupo grupo;

public GrupoBean() {
    this.grupo = new Grupo();
}

public List&lt;Grupo&gt; getLista() {
    return new GrupoDao().getLista();
}

public void adicionar() {
    new GrupoDao().adiciona(grupo);
}

public Grupo getGrupo() {
    return grupo;
}

public void setGrupo(Grupo grupo) {
    this.grupo = grupo;
}

}[/code][/quote]

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

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?

[code]<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p=“http://primefaces.org/ui”>

    &lt;p:dialog appendToBody="false" header="Create Group" widgetVar="criarGrupoDialog" resizable="false" showEffect="fade" hideEffect="fade" modal="true"&gt;
        &lt;h:panelGrid id="criarGrupoDisplay" columns="1" cellpadding="0" style="margin: 0 auto;"&gt;
            &lt;h:outputText value="Name"/&gt;
            &lt;h:inputText value="#{grupoBean.grupo.titulo}"/&gt;
            &lt;p:commandButton value="Save" actionListener="#{grupoBean.adicionar()}" oncomplete="criarGrupoDialog.hide()" ajax="false"/&gt;
            &lt;p:commandButton value="Cancel" oncomplete="criarGrupoDialog.hide()"/&gt;
        &lt;/h:panelGrid&gt;
    &lt;/p:dialog&gt;

</ui:composition>[/code]

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?

[code]<?xml version=“1.0” encoding=“UTF-8”?>
<!–
To change this template, choose Tools | Templates
and open the template in the editor.
–>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f=“http://java.sun.com/jsf/core"
xmlns:ui=“http://java.sun.com/jsf/facelets"
xmlns:p=“http://primefaces.org/ui”>
<f:view contentType=“text/html”>
<h:head>
<f:facet name=“first”>
<meta content=‘text/html; charset=UTF-8’ http-equiv=“Content-Type”/>
<title>Manager</title>
</f:facet>
</h:head>
<h:body>
<p:layout fullPage=“true”>
<p:layoutUnit position=“north” size=“200” resizable=“true” closable=“true” collapsible=“true”>
Header
</p:layoutUnit>
<p:layoutUnit position=“south” size=“100” closable=“true” collapsible=“true”>
Footer
</p:layoutUnit>
<p:layoutUnit position=“west” size=“275” header=“Actions” collapsible=“true”>
<h:form>
<p:tieredMenu>
<p:menuitem actionListener=”#{managerBean.preparaEntidade(actionEvent)}” oncomplete=“criarRegistroDialog.show()” value=“Add Data”/>
</p:tieredMenu>
</h:form>
</p:layoutUnit>
<p:layoutUnit position=“center”>

                &lt;h:form id="formulario2" prependId="false"&gt;  
                    &lt;p:dialog appendToBody="false" header="Create Registry" widgetVar="criarRegistroDialog" resizable="false" showEffect="fade" hideEffect="fade" modal="false"&gt;
                        &lt;h:panelGrid id="criarRegistroDisplay" columns="1" cellpadding="0" style="margin: 0 auto;"&gt;
                            &lt;h:outputText value="URL"/&gt;
                            &lt;h:inputText value="#{managerBean.entidade.url}"/&gt;
                            &lt;h:outputText value="Title"/&gt;
                            &lt;h:inputText value="#{managerBean.entidade.tituloR}"/&gt;
                            &lt;h:outputText value="Group"/&gt;
                            &lt;p:selectOneMenu value="#{managerBean.grupo}" effect="fade"&gt;
                                &lt;f:selectItems value="#{managerBean.listaG}" var="grupo" itemLabel="#{grupo.titulo}" itemValue="#{grupo}"/&gt;
                            &lt;/p:selectOneMenu&gt;                                
                            &lt;h:outputText value="Username"/&gt;
                            &lt;h:inputText value="#{managerBean.entidade.usuario}"/&gt;
                            &lt;h:outputText value="Password"/&gt;
                            &lt;h:inputSecret value="#{managerBean.entidade.senha}"/&gt;
                            &lt;h:outputText value="Notes"/&gt;
                            &lt;h:inputTextarea value="#{managerBean.entidade.descricao}"/&gt;
                            &lt;p:commandButton value="Save" actionListener="#{managerBean.adicionarRegistro()}" oncomplete="criarRegistroDialog.hide()" ajax="false"/&gt;
                            &lt;p:commandButton value="Cancel" oncomplete="criarRegistroDialog.hide()"/&gt;
                        &lt;/h:panelGrid&gt;
                    &lt;/p:dialog&gt;
                &lt;/h:form&gt;

            &lt;/p:layoutUnit&gt;
        &lt;/p:layout&gt;
    &lt;/h:body&gt;
&lt;/f:view&gt;

</html>[/code][code]
@ManagedBean
@SessionScoped
public class ManagerBean {

private List&lt;Grupo&gt; listaG;
private List&lt;Registro&gt; listaR;
private Entidade entidade;
private Grupo grupo;
private Registro registro;

/**
 * Creates a new instance of ManagerBean
 */
public ManagerBean() {
    this.entidade = new Entidade();
    this.grupo = new Grupo();
    this.registro = new Registro();
}

public Entidade getEntidade() {
    return entidade;
}

public void setEntidade(Entidade entidade) {
    this.entidade = entidade;
}

public Grupo getGrupo() {
    return grupo;
}

public void setGrupo(Grupo grupo) {
    this.grupo = grupo;
}

public void preparaEntidade(ActionEvent actionEvent) {
    this.entidade = new Entidade();
}

public void adicionarRegistro() {
    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());
    new RegistroDao().adiciona(registro);
}

public List&lt;Grupo&gt; getListaG() {
    return this.listaG = new GrupoDao().getLista();
}

}
[/code]

O dialog precisa estar fora do form.

Se eu fizer isso dá erro:“CommandButton : “j_idt49” must be inside a form element”

Sim, coloque o form dentro do panelGrid.

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:

&lt;h:form&gt; &lt;p:tieredMenu&gt; &lt;p:menuitem actionListener="#{managerBean.preparaEntidade(actionEvent)}" oncomplete="criarRegistroDialog.show()" value="Add Data"/&gt; &lt;/p:tieredMenu&gt; &lt;/h:form&gt;

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?

[code] <h:form id=“formulario3”>
<p:tieredMenu>
<p:menuitem actionListener="#{managerBean.preparaEntidade()}" onclick=“criarRegistroDialog.show();” value=“Add Data” ajax=“true”/>
</p:tieredMenu>
</h:form>

                &lt;p:dialog appendToBody="false" header="Create Registry" widgetVar="criarRegistroDialog" resizable="false" showEffect="fade" hideEffect="fade" modal="false"&gt;
                    &lt;h:form id="formulario2" prependId="false"&gt;  
                        &lt;h:panelGrid id="criarRegistroDisplay" columns="1" cellpadding="0" style="margin: 0 auto;"&gt;
                            &lt;h:outputText value="URL"/&gt;
                            &lt;h:inputText value="#{managerBean.entidade.url}"/&gt;
                            &lt;h:outputText value="Title"/&gt;
                            &lt;h:inputText value="#{managerBean.entidade.tituloR}"/&gt;
                            &lt;h:outputText value="Group"/&gt;
                            &lt;p:selectOneMenu value="#{managerBean.grupo}" effect="fade"&gt;
                                &lt;f:selectItems value="#{managerBean.listaG}" var="grupo" itemLabel="#{grupo.titulo}" itemValue="#{grupo}"/&gt;
                            &lt;/p:selectOneMenu&gt;                                
                            &lt;h:outputText value="Username"/&gt;
                            &lt;h:inputText value="#{managerBean.entidade.usuario}"/&gt;
                            &lt;h:outputText value="Password"/&gt;
                            &lt;h:inputSecret value="#{managerBean.entidade.senha}"/&gt;
                            &lt;h:outputText value="Notes"/&gt;
                            &lt;h:inputTextarea value="#{managerBean.entidade.descricao}"/&gt;
                            &lt;p:commandButton value="Save" update=":formulario:tabela" actionListener="#{managerBean.adicionarRegistro()}" oncomplete="criarRegistroDialog.hide()" ajax="true"/&gt;
                            &lt;p:commandButton value="Cancel" oncomplete="criarRegistroDialog.hide()"/&gt;
                        &lt;/h:panelGrid&gt;
                    &lt;/h:form&gt;
                &lt;/p:dialog&gt;  [/code][code]    public void preparaEntidade() {
    this.entidade = new Entidade();
}

public void adicionarRegistro() {
    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());
    new RegistroDao().adiciona(registro);
}[/code]Talvez com a página completa:[code]&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;

<!–
To change this template, choose Tools | Templates
and open the template in the editor.
–>
<!DOCTYPE html>
<html xmlns=“http://www.w3.org/1999/xhtml"
xmlns:h=“http://java.sun.com/jsf/html"
xmlns:f=“http://java.sun.com/jsf/core"
xmlns:ui=“http://java.sun.com/jsf/facelets"
xmlns:p=“http://primefaces.org/ui”>
<f:view contentType=“text/html”>
<h:head>
<f:facet name=“first”>
<meta content=‘text/html; charset=UTF-8’ http-equiv=“Content-Type”/>
<title>Manager</title>
</f:facet>
</h:head>
<h:body>
<p:layout fullPage=“true”>
<p:layoutUnit position=“north” size=“200” resizable=“true” closable=“true” collapsible=“true”>
Header
</p:layoutUnit>
<p:layoutUnit position=“south” size=“100” closable=“true” collapsible=“true”>
Footer
</p:layoutUnit>
<p:layoutUnit position=“west” size=“275” header=“Actions” collapsible=“true”>
<h:form id=“formulario3”>
<p:tieredMenu>
<p:menuitem actionListener=”#{managerBean.preparaEntidade()}” onclick=“criarRegistroDialog.show();” value=“Add Data” ajax=“true”/>
<p:separator />
<p:menuitem oncomplete=“criarGrupoDialog.show()” value=“Create”/>
</p:tieredMenu>
</h:form>
</p:layoutUnit>
<p:layoutUnit position=“center”>
<h:form id=“formulario” prependId=“false”>
<p:dataTable id=“tabela” var=“entidade” value=”#{managerBean.listaE}”>
<p:column headerText=“Group”>
<h:outputText value="#{entidade.tituloG}"/>
</p:column>
<p:column headerText=“Title”>
<h:outputText value="#{entidade.tituloR}"/>
</p:column>
<p:column headerText=“User”>
<h:outputText value="#{entidade.usuario}"/>
</p:column>
<p:column headerText=“URL”>
<h:outputText value="#{entidade.url}"/>
</p:column>
<p:column headerText=“Create date” style=“width: 150px”>
<h:outputText value="#{entidade.dataCriacao}"/>
</p:column>
<p:column headerText=“Alteration date” style=“width: 150px”>
<h:outputText value="#{entidade.dataAlteracao}"/>
</p:column>
<p:column style=“width: 40px”>
<p:commandLink update=":formulario:exibirEntidadeDisplay" oncomplete=“exibirEntidadeDialog.show()” value=“View”>
<f:setPropertyActionListener value="#{entidade}" target="#{managerBean.entidade}"/>
</p:commandLink>
</p:column>
</p:dataTable>

                    &lt;p:dialog appendToBody="false" header="View Data" widgetVar="exibirEntidadeDialog" resizable="false" showEffect="fade" hideEffect="fade" modal="false"&gt;
                        &lt;h:panelGrid id="exibirEntidadeDisplay" columns="2" cellpadding="4" style="margin: 0 auto;"&gt;
                            &lt;h:outputText value="Username:"/&gt;
                            &lt;h:outputText value="#{managerBean.entidade.usuario}"/&gt;
                            &lt;h:outputText value="Password:"/&gt;
                            &lt;h:outputText value="#{managerBean.entidade.senha}"/&gt;
                        &lt;/h:panelGrid&gt;
                    &lt;/p:dialog&gt;

                &lt;/h:form&gt;

                &lt;p:dialog appendToBody="false" header="Create Registry" widgetVar="criarRegistroDialog" resizable="false" showEffect="fade" hideEffect="fade" modal="false"&gt;
                    &lt;h:form id="formulario2" prependId="false"&gt;  
                        &lt;h:panelGrid id="criarRegistroDisplay" columns="1" cellpadding="0" style="margin: 0 auto;"&gt;
                            &lt;h:outputText value="URL"/&gt;
                            &lt;h:inputText value="#{managerBean.entidade.url}"/&gt;
                            &lt;h:outputText value="Title"/&gt;
                            &lt;h:inputText value="#{managerBean.entidade.tituloR}"/&gt;
                            &lt;h:outputText value="Group"/&gt;
                            &lt;p:selectOneMenu value="#{managerBean.grupo}" effect="fade"&gt;
                                &lt;f:selectItems value="#{managerBean.listaG}" var="grupo" itemLabel="#{grupo.titulo}" itemValue="#{grupo}"/&gt;
                            &lt;/p:selectOneMenu&gt;                                
                            &lt;h:outputText value="Username"/&gt;
                            &lt;h:inputText value="#{managerBean.entidade.usuario}"/&gt;
                            &lt;h:outputText value="Password"/&gt;
                            &lt;h:inputSecret value="#{managerBean.entidade.senha}"/&gt;
                            &lt;h:outputText value="Notes"/&gt;
                            &lt;h:inputTextarea value="#{managerBean.entidade.descricao}"/&gt;
                            &lt;p:commandButton value="Save" update=":formulario:tabela" actionListener="#{managerBean.adicionarRegistro()}" oncomplete="criarRegistroDialog.hide()" ajax="true"/&gt;
                            &lt;p:commandButton value="Cancel" oncomplete="criarRegistroDialog.hide()"/&gt;
                        &lt;/h:panelGrid&gt;
                    &lt;/h:form&gt;
                &lt;/p:dialog&gt;     

                &lt;p:dialog appendToBody="false" header="Create Group" widgetVar="criarGrupoDialog" resizable="false" showEffect="fade" hideEffect="fade" modal="false"&gt;
                    &lt;h:form&gt;
                        &lt;h:panelGrid id="criarGrupoDisplay" columns="1" cellpadding="0" style="margin: 0 auto;"&gt;
                            &lt;h:outputText value="Name"/&gt;
                            &lt;h:inputText value="#{managerBean.grupo.titulo}"/&gt;
                            &lt;p:commandButton value="Save" actionListener="#{managerBean.adicionarGrupo()}" oncomplete="criarGrupoDialog.hide()" ajax="false"/&gt;
                            &lt;p:commandButton value="Cancel" oncomplete="criarGrupoDialog.hide()"/&gt;
                        &lt;/h:panelGrid&gt;
                    &lt;/h:form&gt;
                &lt;/p:dialog&gt;                         

            &lt;/p:layoutUnit&gt;
        &lt;/p:layout&gt;
    &lt;/h:body&gt;
&lt;/f:view&gt;

</html>[/code]

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.

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.

Ja tentou usar o oncomplete ao invés do onclick? E o action ao invés do actionListener?

[]'s