Editar usuário com Hibernate e JSF

9 respostas
A

Eu estou com dificuldade em editar um registro do banco usando jsf. Não consigo fazer com que o formulário seja populado com as informações da tabela que eu quero editar e enfim, editar. O meu método está no máximo add um novo usuário a lista. Se alguém puder dar uma olhada e tiver alguma dica eu agradeço.

No Bean:

public String update() {

        try {

            manager.getTransaction().begin();
            manager.merge(user);
            manager.getTransaction().commit();

            //newInstance();

            return "update";
        } catch (Exception e) {
            e.printStackTrace();
            return "falhou";
        }

atualizar.xhtml

<h:form>
                            <!--Início tabela de lista-->
                            <h:dataTable value="#{usuarioBeans.usuarios}" var="user" styleClass="orders" headerClass="ordersHeader" columnClasses="oddColumn" rowClasses=" eveRow, oddRow">
                                <h:column>
                                    <f:facet name="header">
                                        Id
                                    </f:facet>
                                    #{user.id}
                                </h:column>
                                <h:column>
                                    <f:facet name="header">
                                        Nome
                                    </f:facet>
                                    #{user.nome}
                                </h:column>
                                <h:column>
                                    <f:facet name="header">
                                        Login
                                    </f:facet>
                                    #{user.login}
                                </h:column>
                                <h:column>
                                    <f:facet name="header">
                                        Senha
                                    </f:facet>
                                    #{user.senha}
                                </h:column>
                                <h:column>
                                    <f:facet name="header">
                                        Data de nascimento
                                    </f:facet>
                                    #{user.datanascimento}
                                </h:column>
                                <h:column>
                                    <f:facet name="header">
                                        Observações
                                    </f:facet>
                                    #{user.observacoes}
                                </h:column>
                                <h:column>
                                    <f:facet name="header">

                                    </f:facet>

                                    <h:outputLink value="formAtualizar.xhtml" styleClass="doislink" >
                                        <h:commandButton value="Atualizar" action="#{usuarioBeans.update}">
                                            <f:param value="#{user}"></f:param>
                                            <f:setPropertyActionListener value="#{user}" target="#{usuarioBeans.user}"/>
                                        </h:commandButton>
                                    </h:outputLink>
                                </h:column> 
                            </h:dataTable> <!--Fim tabela de lista--> 
                        </h:form>

formAtualizar.xhtml

<h:form>
                            <div id="texto">
                                <table>
                                    <tr>
                                        <h:inputHidden value="#{usuarioBeans.user.id}" />
                                        <td align="right"><h:outputText value="Nome"></h:outputText></td>
                                        <td><h:inputText value="#{usuarioBeans.user.nome}" id="nome" required="true" requiredMessage="Campo Nome é obrigatório"></h:inputText><br/></td>
                                    </tr>
                                    <tr>
                                        <td align="right"><h:outputText value="Login"></h:outputText></td>
                                        <td><h:inputText value="#{usuarioBeans.user.login}" id="login" required="true" requiredMessage="Campo Login é obrigatório">
                                                <f:validateLength maximum="20"></f:validateLength>
                                            </h:inputText><br/></td>
                                    </tr>
                                    <tr>
                                        <td align="right"><h:outputText value="Senha"></h:outputText></td>
                                        <td><h:inputSecret value="#{usuarioBeans.user.senha}" id="senha" required="true" requiredMessage="Campo Senha é obrigatório">
                                                <f:validateLength maximum="10" minimum="6"></f:validateLength>
                                            </h:inputSecret><br/></td>
                                    </tr>
                                    <tr>
                                        <td align="right"><h:outputText value="Data de nascimento"></h:outputText></td>
                                        <td>&nbsp;<h:inputText value="#{usuarioBeans.user.datanascimento}" id="datanascimento" required="true" requiredMessage="Campo Data de nascimento é obrigatório">
                                                <f:convertDateTime pattern="dd/MM/yyyy" timeZone="#{usuarioBeans.tz}"></f:convertDateTime>
                                            </h:inputText>
                                            <br/></td>
                                    </tr>
                                    <tr>
                                        <td align="right"><h:outputText value="Observações"></h:outputText></td>
                                        <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<h:inputTextarea value="#{usuarioBeans.user.observacoes}" id="observacoes"></h:inputTextarea><br/></td>
                                        <h:messages layout="list"/>
                                    </tr>
                                    <tr>
                                        <td></td>
                                        <td align="right"><h:commandButton value="Confirmar" action="#{usuarioBeans.update}"></h:commandButton></td>

                                    </tr>
                                </table>
                            </div><!--fim texto-->
                        </h:form> <!--Fim formulário de cadastro-->

Deve ter um monte de coisa errada ai no meio, peço desculpas, mas foi uma das tentativas de fazer dar certo…

9 Respostas

A

desta forma cm está, ao tentar confirmar a edição, apesar de não popular informação nenhuma no form, a app dispara o seguinte erro:

Não foi possível encontrar um caso de navegação correspondente na ID de exibição ‘/formAtualizar.xhtml’ para a ação ‘#{usuarioBeans.update}’ com o resultado 'update`

:?

R

Posta o código completo do bean.

D

Sua pagina principal (atualizar) está chamando o método(update) que atualiza o objeto sem ter chego no formulário (formAtualizar)

você deve chamar o método update apenas no formularioaAtualizar…

tente seu atualizar.xhtml dessa maneira :

<h:commandLink value="Atualizar" action=""formAtualizar.xhtml">   // o action do link é o caminho do seu formulário
                  <f:setPropertyActionListener value="#{user}" target="#{usuarioBeans.user}"/>  
</h:commandLink >
A

ddark.emanu!!! De JavaChild tu não tem nada!!! ehehehe

Nossa!! Deu certinho!! Que alegria…
eu tava perdidíssima bem neste trecho…sabia que tinha mt coisa errada e fora do lugar e não sabendo como organizar e fazer funcionar!!

Muito Obrigada!! :smiley:

A

mas agora ta dando erro no meu método … :oops: :oops:

public String update() {

        try {

            manager.getTransaction().begin();
            manager.merge(user);
            manager.getTransaction().commit();

            newInstance();

            return "sucesso";
        } catch (Exception e) {
            e.printStackTrace();
            return "falhou";
        }

    }

dispara o seguinte erro: Não foi possível encontrar um caso de navegação correspondente na ID de exibição ‘/formAtualizar.xhtml’ para a ação ‘#{usuarioBeans.update}’ com o resultado ‘falhou’

D

uahuhaua não foi nada …

tenter colocar um manager.flush() depois de merge. ( no bean )

mais ainda acredito que seu erro está na view posta seu faces bean e sua view …

M

Provavelmente no seu faces-config.xml não há nenhuma regra de navegação para a string “falhou”

A

Mas cm o meu remover funciona então?? Eu nem tenho este arquivo…

package Beans;

import java.util.List;
import java.util.TimeZone;
import javax.faces.bean.ManagedBean;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import modelo.Usuario;
import util.DAO;
import util.HibernateUtil;

@ManagedBean 
public class UsuarioBeans {

    EntityManager manager = HibernateUtil.getManager();
    private Usuario user = new Usuario();
    private DAO dao = new DAO();
    private TimeZone tz = TimeZone.getTimeZone("America/Sao_Paulo");
    private Long id;
    List<Usuario> lista;
    private String nome; 

    public String getNome() {
        return nome;
    }

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

    public TimeZone getTz() {
        return tz;
    }

    public void setTz(TimeZone tz) {
        this.tz = tz;
    }

    public Usuario getUser() {
        return user;
    }

    public void setUser(Usuario user) {
        this.user = user;
    }

    public void setId(Long id) {
        this.id = id;
        if (id != null) {
            user = manager.find(Usuario.class, id);
        }
    }

    public Long getId() {
        return id;
    }

    public void newInstance() {
        user = new Usuario();
    }

    public void inserirUsuario() {
        manager.getTransaction().begin();
        manager.persist(user);
        manager.getTransaction().commit();

        user = new Usuario();
    }

    public List listarTodosUsuarios() {
        Query query = manager.createQuery("select u from Usuario u");
        lista = (List<Usuario>) query.getResultList();
        if (lista.isEmpty()) {
        }
        return lista;

    }

    public List getUsuarios() {
        return listarTodosUsuarios();

    }

    public String remove() {

        try {
            manager.getTransaction().begin();
            manager.remove(user);
            manager.getTransaction().commit();

            newInstance();
            lista = null;

            return "sucesso";
        } catch (Exception e) {
            e.printStackTrace();
            return "falhou";
        }
    }

    public String update() {

        try {

            manager.getTransaction().begin();
            manager.merge(user);
            manager.getTransaction().commit();


            newInstance();

            return "sucesso";
        } catch (Exception e) {
            e.printStackTrace();
            return "falhou";
        }

    }


    public List buscarClientePorNome() {
        Query query = manager.createQuery("select u from Usuario u where nome like :nome");
        query.setParameter("nome", nome);
        lista = (List<Usuario>) query.getResultList();
        if (lista.isEmpty()) {
            return null;
        }
        return lista;
    }

    public List getBuscaUsuarios() {
        return buscarClientePorNome();

    }
}
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
        <link rel="stylesheet" type="text/css"  href="estilo.css"/>
        <title>Controle de Usuários</title>
    </h:head>
    <h:body>
        <div id="geral">
            <div id="content">
                <div id="cabecalho">
                    <div id="intCab">Controle de Usuários</div><!--fim intCab--><br />
                    <div id="subTitulo">
                        <h:form>Você está em:&nbsp;&nbsp;
                            <h:outputLink value="index.xhtml" styleClass="umlink" >
                                <f:verbatim>Home</f:verbatim>
                            </h:outputLink>&nbsp;&nbsp;>>&nbsp;&nbsp;
                            <h:outputLink value="atualizar.xhtml" styleClass="doislink" >
                                <f:verbatim>Atualizar</f:verbatim>
                            </h:outputLink>
                        </h:form>
                    </div><!--fim subtitulo-->
                </div><!--fim cabecalho-->
                <div id="conteudo">
                    <div id="contPrincipal">
                        <br />
                        <br />
                        <br />
                        <h:form>
                            <h:inputHidden value="#{usuarioBeans.user.id}" />
                            <div id="texto">
                                <table>
                                    <tr>
                                        <td align="right"><h:outputText value="Nome"></h:outputText></td>
                                        <td><h:inputText value="#{usuarioBeans.user.nome}" id="nome" required="true" requiredMessage="Campo Nome é obrigatório"></h:inputText><br/></td>
                                    </tr>
                                    <tr>
                                        <td align="right"><h:outputText value="Login"></h:outputText></td>
                                        <td><h:inputText value="#{usuarioBeans.user.login}" id="login" required="true" requiredMessage="Campo Login é obrigatório">
                                                <f:validateLength maximum="20"></f:validateLength>
                                            </h:inputText><br/></td>
                                    </tr>
                                    <tr>
                                        <td align="right"><h:outputText value="Senha"></h:outputText></td>
                                        <td><h:inputSecret value="#{usuarioBeans.user.senha}" id="senha" required="true" requiredMessage="Campo Senha é obrigatório">
                                                <f:validateLength maximum="10" minimum="6"></f:validateLength>
                                            </h:inputSecret><br/></td>
                                    </tr>
                                    <tr>
                                        <td align="right"><h:outputText value="Data de nascimento"></h:outputText></td>
                                        <td>&nbsp;<h:inputText value="#{usuarioBeans.user.datanascimento}" id="datanascimento" required="true" requiredMessage="Campo Data de nascimento é obrigatório">
                                                <f:convertDateTime pattern="dd/MM/yyyy" timeZone="#{usuarioBeans.tz}"></f:convertDateTime>
                                            </h:inputText>
                                            <br/></td>
                                    </tr>
                                    <tr>
                                        <td align="right"><h:outputText value="Observações"></h:outputText></td>
                                        <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<h:inputTextarea value="#{usuarioBeans.user.observacoes}" id="observacoes"></h:inputTextarea><br/></td>
                                        <h:messages layout="list"/>
                                    </tr>
                                    <tr>
                                        <td></td>
                                        <td align="right"><h:commandButton value="Confirmar" action="#{usuarioBeans.update}">
                                                <f:setPropertyActionListener value="#{user}" target="#{usuarioBeans.user}"/>
                                            </h:commandButton></td>

                                    </tr>
                                </table>
                            </div><!--fim texto-->
                        </h:form> <!--Fim formulário de cadastro-->     
                    </div><!--fim contPrincipal-->
                    <div id="lateral">
                        <br />
                        <br />
                        <br />
                        <f:view>
                            <h:form>
                                <h:outputLink value="index.xhtml" styleClass="link" >
                                    <f:verbatim>Home</f:verbatim>
                                </h:outputLink>
                                <br /><br />
                                <h:outputLink value="inserir.xhtml" styleClass="link" >
                                    <f:verbatim>Inserir</f:verbatim>
                                </h:outputLink>
                                <br /><br />
                                <h:outputLink value="buscar.xhtml" styleClass="link">
                                    <f:verbatim>Buscar</f:verbatim>
                                </h:outputLink>
                                <br /><br />
                                <h:outputLink value="listar.xhtml" styleClass="link">
                                    <f:verbatim>Listar</f:verbatim>
                                </h:outputLink>
                                <br /><br />
                                <h:outputLink value="atualizar.xhtml" styleClass="link">
                                    <f:verbatim>Atualizar</f:verbatim>
                                </h:outputLink>
                                <br /><br />
                                <h:outputLink value="remover.xhtml" styleClass="link">
                                    <f:verbatim>Remover</f:verbatim>
                                </h:outputLink>

                            </h:form>
                        </f:view>
                    </div><!--fim lateral-->
                </div><!--fim conteudo-->
                <div id="rodape">
                    <p>IFSul - 2011/2</p>
                    <p>TAP - Tópicos Avançados em Programação</p>
                    <p>Ariane Rebellato</p>
                    <p>&nbsp;</p>
                </div><!--fim rodape-->
            </div><!--fim content-->
        </div><!--fim geral-->
    </h:body>
</html>
A

ddark.emanu …

com ou sem manager.flush(); o resultado é o mesmo…alguém conhece alguma outra forma de fazer um update em jsf usando o hibernate? qt mais eu tento menos eu consigo…

Criado 4 de outubro de 2011
Ultima resposta 9 de out. de 2011
Respostas 9
Participantes 4