Atualizar JSF e Hibernate

4 respostas
M

Caros Amigos.

Consegui funcionar o sistema de busca usando JSF e Hibernate, agora tenho outro desafio na atualização fiz tudo panelGrid do sistema de busca onde a PK que seria ISBN é um link que direciona uma página JSP "atuLivro.jsp"
O direcionamento está correto, não apresenta erros, porém não esta executando update pelo banco de dados
Alguém poderia me ajudar ?
segue abaixo o código fonte.

Médoto pacote LivrariaDAO

public void atualizar(Livros livro){
        session = ConnectionLivrariaFactory.getInstance(); 
        Transaction tx = null; 
                try{
                    tx = session.beginTransaction();
                    session.update(livro);
                    tx.commit();
        }catch (HibernateException e){
            e.printStackTrace();
            //tem objetivo de desfazer a transação
            tx.rollback();
        }finally{
            session.close();


        }

------------------------------------------------------------------------

Método LvrosController

public String editar(){
       Livros livro = getLivroFromEditOrDelete();
       setLivro(livro);
       return "editar";
   }


public String update(){
    InterfaceLivrosDAO idao = new LivrariaDAO();
    idao.atualizar(livro);
       return "atualizar";
}

----------------------------------------------------------------------------------

Método pacote InterfaceLivroDAO

public abstract void atualizar (Livros livro);

---------------------------------------------------------------------------------

mostrarLivros.jsp

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Mostrar Livros</title>
    </head>
    <body>
        <f:view>
            <h:messages />
            <h:form>
                <h:dataTable value='#{livrosView.todos}'
                         var='item' border="1"
                         cellpadding="2" cellspacing="0">
                 <f:facet name="header">
                    <h:outputText value="Mostrar Livros" />
                </f:facet>
                <h:column>
                    <f:facet name="header">
                        <h:outputText value="ISBN" />
                    </f:facet>
                    <h:commandLink
                        action="#{livrosView.editar}"
                        value="#{item.isbn}"/>  //cada registro que apresenta apresenta um link para ser direcionado para atuLivro.jsp
                </h:column>
                <h:column>
                    <f:facet name="header">
                        <h:outputText value="Título" />
                    </f:facet>
                    <h:outputText value="#{item.titulo}"/>
                </h:column>
                <h:column>
                    <f:facet name="header">
                        <h:outputText value="Publicacao em" />
                    </f:facet>
                    <h:outputText value="#{item.publicacao}"/>
                </h:column>

                <h:column>
                    <f:facet name="header">
                        <h:outputText value="Excluir Livros" />
                    </f:facet>
                    <h:commandLink action="#{livrosView.delete}" value="Excluir" />
                </h:column>               

            </h:dataTable>
            <h:commandLink action="#{livrosView.novoLivro}"
                           value="Cadastrar novo livro" />
    </h:form>
        </f:view>
    </body>
</html>

----------------------------------------------------------------------------------
atulivro.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Atualizar</title>
    </head>
    <body>
        <f:view>
            <h:form id="cadastro">
                <h:panelGrid columns="2">
                    <f:facet name="header">
                        <h:outputText value="Atualizar Livros" />
                    </f:facet>
                    <h:outputText value="ISBN:"/>
                    <h:inputText size="15" id="isbn"
                                 value="#{livrosView.livro.isbn}"
                                 readonly="true"/>

                    <h:outputText value="Título:" />
                    <h:inputText size="30" id="titulo"
                                 value="#{livrosView.livro.titulo}" />

                    <h:outputText value="Edição:" />
                    <h:inputText size="10" id="edicao"
                                 value="#{livrosView.livro.edicao}" />

                   <h:outputText value="Publicação:" />
                    <h:inputText size="10" id="publicacao"
                                 value="#{livrosView.livro.publicacao}" />
                </h:panelGrid>

                <h:commandButton value="Redefinir"
                                 action="#{livrosView.update}" />
                <h:commandButton value="Cancelar" action="mostrar" />


            </h:form>
        </f:view>
    </body>
</html>

------------------------------------------------------------------
faces-config.xml

<navigation-rule>
  <display-name>mostrar</display-name>
  <from-view-id>/mostrarLivros.jsp</from-view-id>
  <navigation-case>
   <from-outcome>editar</from-outcome>
   <to-view-id>/atuLivro.jsp</to-view-id>
  </navigation-case>
 </navigation-rule>

4 Respostas

Zenas

Olá amigo,

Vc pode depurar o método [update], verifique se relamente o objeto [livro] está com os atributos preenchidos, derrepente o método [getLivroFromEditOrDelete()] não está trazendo o OID do objeto, é interessante realizar testes unitário com o JUnit, principalmente nas operação de CRUD do Hibernate para reduzir a probabilidade de bugs.
Se essa operação informar um erro, post o erro ai no site

Espero ter ajudado,
Abraços

M

Zenas

Execute Junit não está apresentando nenhum erro.

pacote LivrosController

public Livros getLivroFromEditOrDelete(){
       Livros livro =
               (Livros) model.getRowData();
       return livro;
   }
Zenas

Olá,

Quando vc executa o site, é apresentado alguma mensagem de erro no console. Tente criar uma classe conforme o exemplo abaixo para vc verificar o q está acontencendo

public class Teste {

/**
 * @param args
 */
public static void main(String[] args) {

                InterfaceLivrosDAO idao = new LivrariaDAO();   
                Livro livro = new Livro();
            
                // Pega um livro já cadastrado 
                livro = idao.livroPor( 1L );
                livro.setTitulo( "Livro alterado" );

                idao.atualizar(livro);   

                System.out.printl( "Alteração realizada com sucesso !!!!" );

Espero ter ajudado,
Abraços

M

Agora apresentou esse erro

HTTP Status 500 -

type Exception report

message

descriptionThe server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: javax.el.MethodNotFoundException: Method not found: [email removido]()

root cause

javax.faces.el.MethodNotFoundException: javax.el.MethodNotFoundException: Method not found: [email removido]()

root cause

javax.el.MethodNotFoundException: Method not found: [email removido]()

note The full stack traces of the exception and its root causes are available in the GlassFish Server Open Source Edition 3.0.1 logs.

Criado 8 de setembro de 2010
Ultima resposta 8 de set. de 2010
Respostas 4
Participantes 2