Busca com JSF e HIBERNATE

Pessoal

Estou tendo problema para implantar o sistema de busca usando JSP, JSF e Hibernate segue abaixo:

pacote LivrariaDAO

public List consultarTitulos (String titulo){ session = ConnectionLivrariaFactory.getInstance(); Query query = session.createQuery("from Livros l where l.titulo like :titulo"); List list = query.setString("titulo", "%"+titulo+"%").list(); return list; }


pacote meupacote.dao.InterfaceLivrosDAO

public abstract List consultarTitulos(String titulo);

pacote meupacote.controller.LivrosController

[code]public String getKeysearch(){
return keysearch;
}

public void setKeysearch(String keysearch){
this.keysearch = keysearch;
}

public DataModel getBuscaLivros(){
InterfaceLivrosDAO idao = new LivrariaDAO();
model =
new ListDataModel(idao.consultarTitulos(keysearch));
return model;
}

[/code]


menu.jsp

<f:view>
             <h:form id="buscar">
                 <h:panelGrid columns="2">
                     <f:facet name="header">
                         <h:outputText value="Busca de Livros" />
                     </f:facet>
                     <h:outputText value="Titulo: " />
                     <h:inputText size="30" id="titulo" value = "#{LivrosView.keysearch}" />
                     <%-- METODO QUE CHAMA MEUPACOTE.CONTROLLER --%>
               </h:panelGrid>
                 <h:commandButton value="Buscar" action="buscar"  />
            </h:form>
</f:view>

mostrarLivrosPesquisado.jsp

[code]<f:view>
<h:messages />

Livros Encontrados


<h:form>
<h:dataTable value=’#{livrosView.BuscarLivro}’
var=‘item’ border=“1”
cellpadding=“2” cellspacing=“0”>
<h:column>
<f:facet name=“header”>
<h:outputText value=“ISBN” />
</f:facet>
</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:column>
       </h:dataTable>
        <h:commandLink action="#{livrosView.novoLivro}"
                       value="Cadastrar novo livro" />
</h:form>
    </f:view>
</body>


[/code]

faces-config

<faces-config>

<!--- O Bean LivrosController -->
<managed-bean>
    <managed-bean-name>livrosView</managed-bean-name>
    <managed-bean-class>
        meupacote.controller.LivrosController
   </managed-bean-class>
   <managed-bean-scope>session</managed-bean-scope>
   </managed-bean>

  

  
<!-- Cadastro de novo livro -->
 <navigation-rule>
       <display-name>formLivros</display-name>
       <from-view-id>/formLivros.jsp</from-view-id>
       <navigation-case>
           <from-outcome>sucesso_ins</from-outcome>
           <to-view-id>/mostrarLivros.jsp</to-view-id>
       </navigation-case>
   </navigation-rule>

   <!-- Chamada ao formulario de cadastro de livro -->
 <navigation-rule>
       <display-name>menu</display-name>
       <from-view-id>/menu.jsp</from-view-id>
       <navigation-case>
           <from-outcome>novo</from-outcome>
           <to-view-id>/formLivros.jsp</to-view-id>
       </navigation-case>
   </navigation-rule>

<!--Sucesso da exclusão do Livro -->
<navigation-rule>
       <display-name>mostraLivros</display-name>
       <from-view-id>/mostrarLivros.jsp</from-view-id>
       <navigation-case>
           <from-outcome>sucesso_exc</from-outcome>
           <to-view-id>/mostrarLivros.jsp</to-view-id>
       </navigation-case>
   </navigation-rule>


   <!-- Mostrando livro pesquisado -->
 <navigation-rule>
     <navigation-case>
           <from-outcome>buscar</from-outcome>
           <to-view-id>/mostrarLivrosPesquisado.jsp</to-view-id>
      </navigation-case>
   </navigation-rule>

  
</faces-config>

e apresenta esse erro

type Exception report

message

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

exception

javax.servlet.ServletException: Target Unreachable, identifier ‘LivrosView’ resolved to null

root cause

javax.el.PropertyNotFoundException: Target Unreachable, identifier ‘LivrosView’ resolved to null

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.

alguém poderia me ajudar ?

Obrigado
[/quote]

Cara primeiro o List que está retornando não esta tipado ou seja List list exe: List list sendo que Produtos é uma classe e contem as propriedades que vai mostrar no h:dataTable.
E o seu livrosView.BuscarLivro deve retornar esta List tipada e não um dataModel fica mais simples, não que não possa usar um dataModel para popular a tabela mas ai muda um pouco a coisa…

Qualquer coisa posta ai!
Wolmir Garbin

wolmirGarbin

Olá poderia colocar o código como posso fazer para executar ? pois sou iniciante nessa linguagem
obrigado

Bom assim:

Tenho o Model:

@SuppressWarnings("serial")
@Entity
public class P_Modelos implements Serializable{

	@EmbeddedId
	@AttributeOverrides({
		@AttributeOverride(name = "p_modeloid", column = @Column(name = "P_MODELOID")),
		@AttributeOverride(name = "p_juisadoid", column = @Column(name = "P_JUISADOID"))
	})
	private P_ModelosId id;
	
	@Column(name = "P_NOME", length = 120)
	private String p_nome;
	private String p_primeiro;
	private String p_segundo;
	private String p_terceiro;
	private String p_quarto;
	private String p_quinto;
	private String p_sexto;
	private String p_setimo;
	private String p_oitavo;
	private String p_nono;
	private String p_decimo;

        gets e sets....

Tenho um metodo que busca uma lista de objetos do banco de dados!

public List<P_Modelos> getModelo(){
		List<P_Modelos> list = null;
		Session session = Hibernate.getSession();
		
		try {	
			Criteria cri = session.createCriteria(P_Modelos.class)
				.setFetchMode("id", FetchMode.LAZY);
			
			list = cri.list();
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			session.close();
		}
		return list;
	}

E esta lista é jogada no atributo que esta no beam

public class Formulario{

       List<P_Modelos> list = null;

       public Formulario(){
           list  = new getModelo();
       }

esta ultima classe deve ser mapeada no faces-config.xml como vc fez acima e no dataTabe vc coloca

<f:view>
            <h:messages />
            <h1>Livros Encontrados</h1>
            <h:form>
                <h:dataTable value='#{Formulario.list}'
                         var='item' border="1"
                         cellpadding="2" cellspacing="0">
                      <h:column>
                         <f:facet name="header">
                             <h:outputText value="ISBN" />
                        </f:facet>
                     </h:column>
                    <h:column>
                        <f:facet name="header">
                            <h:outputText value="Título" />
                        </f:facet>
                    <h:outputText value="#{item.p_nome}"/> <!--Chamando os atributos do objeto-->
                  </h:column>
                 <h:column>

Não sei se o codigo vai rodar mas espero ter ajudado
Valeu!

Wolmir Garbin

dar uma olhada http://blog.camilolopes.com.br/busca-com-hibernate-annotation-jsf/

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 erro, porém não esta executando update pelo banco de dados e meu banco é Oracle
Alguém poderia me ajudar ?
segue abaixo o código fonte.

Médoto pacote LivrariaDAO

[code]
public void atualizar(Livros livro){
session = ConnectionLivrariaFactory.getInstance(); //cria uma sessão
Transaction tx = null; //permite transações no BD
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();

    }[/code]

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);

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>

Cara aparentemente seu codigo esta correto, tenta verificar se o objeto livro que esta tentando atualizar esta populado corretamente com os dados, caso esteja ocorrendo algum erro posta ai numa dessas podemos lhe ajudar mais…
Se o objeto não estiver com os dados certos pode dar erro mesmo mas o metodo esta correto

Espero ter ajudado valeu!

Wolmir Garbin

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: meupacote.Livros@1ad8582.update()

root cause

javax.faces.el.MethodNotFoundException: javax.el.MethodNotFoundException: Method not found: meupacote.Livros@1ad8582.update()

root cause

javax.el.MethodNotFoundException: Method not found: meupacote.Livros@1ad8582.update()

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.

Voce nao tem que chamar o update do atributo actionListener no commandButton? tipo:

lembrado que nesse caso o metodo update deve receber um actionEvent como parametro.

gabrielbzan

Modifiquei o parametro, mas não está mudando a atualização pelo banco de dados

e não apresenta erro ao clicar no botão

Obrigado