Struts 2 + JPA

4 respostas
danielti

Pessoal,

Não consigo resolver este erro:

java.lang.NullPointerException
at mapIntelligence.ListaUsuariosAction.execute(ListaUsuariosAction.java:20)

Fonte da Classe:

package mapIntelligence;

import java.util.List;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;

public class ListaUsuariosAction extends ActionSupport{

private UsuarioImpl servico;

private List usuarios;

public ListaUsuariosAction() {
}
 public ListaUsuariosAction(UsuarioImpl servico) {  
       servico = servico;
 }
 public String execute() throws Exception {
       usuarios = servico.listarUsuarios();
      return Action.SUCCESS;

 }

}

UsuarioImpl :

package mapIntelligence;

import java.util.ArrayList;

import java.util.Collections;

import java.util.List;

public class UsuarioImpl implements UsuarioIF{
private UsuarioDAO usuarioDAO;

public UsuarioImpl() {
}

public UsuarioImpl(UsuarioDAO usuarioDAO) {
      this.usuarioDAO = usuarioDAO;
}

public Usuario acharUsuario(Long id) {
      return usuarioDAO.acharUsuario(id);
}
public List<Usuario> listarUsuarios() {
      List<Usuario> lista = new ArrayList<Usuario>();
      List<Usuario> lista2 = usuarioDAO.obtemListaUsuario();
      if(lista2 != null) {
            lista.addAll(lista2);
      }
      return lista;
}



public void removerUsuario(Long id) {

      usuarioDAO.removerUsuario(id);

}

public void salvarUsuario(Usuario usuario) {

      usuarioDAO.adiciona(usuario);

}



public void removerUsuarios() {

      usuarioDAO.removeUsuarios();

}

public UsuarioDAO getUsuarioDAO() {
	return usuarioDAO;
}

public void setUsuarioDAO(UsuarioDAO usuarioDAO) {
	this.usuarioDAO = usuarioDAO;
}

}

struts.xml :

<?xml version="1.0" encoding="ISO-8859-1"?>
<package name="usuario" extends="struts-default">
/index.jsp /welcome.jsp /erroLogin.jsp /usuario.jsp /usuario.jsp /listaUsuarios.jsp /erroServicoUsuario.jsp /usuario.jsp /erroServicoUsuario.jsp /usuario.jsp
</package>

aplcationContext.xml:

<?xml version="1.0" encoding="ISO-8859-1"?>
<bean
    class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
<bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://teste/teste" />
    <property name="username" value="teste" />
    <property name="password" value="teste" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />

Se alguém puder me ajudar vai ser bom, pois estou tentando aprender struts 2 + JPA e encalhei aqui.
Detalhe:

Tenham paciência por favor, porque ainda estou aprendendo.

Obrigado,

4 Respostas

S

na sua classe ListaUsuarioAction

faça isso

private UsuarioImpl servico = new UsuarioImpl() ;

depois veja o porque não está sendo injetado pelo spring…

danielti

Oi Daniel,

O erro ainda persiste…

Obrigado,

T

poste seu cídogo com as tags “code”, fica mais fácil de ler.

Vc está mapeando suas classes de serviço com nomes diferentes no código da action e no spring… Verifique isso q vai funcionar.

danielti

struts.xml:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    <constant name="struts.objectFactory" value="spring" />
    <constant name="struts.devMode" value="true" />

    <package name="usuario" extends="struts-default">

         
<action name="login!*" method="{1}" class="mapIntelligence.LoginAction">
      <result name="input">/index.jsp</result>
      <result name="valido">/welcome.jsp</result>
      <result name="invalido">/erroLogin.jsp</result>
</action>
           
<action name="insereUsuario" class="mapIntelligence.InsereUsuarioAction">
      <result name="input">/usuario.jsp</result>
      <result>/usuario.jsp</result>
</action>

<action name="listaUsuarios"  class="mapIntelligence.ListaUsuariosAction">     
      <result>/listaUsuarios.jsp</result>
</action>

<action name="removerUsuario!*" method="removeLista"  class="mapIntelligence.RemoverUsuarioAction">
      <result name="erroServicoUsuario">/erroServicoUsuario.jsp</result>
      <result>/usuario.jsp</result>
</action>
        
<action name="removerUsuario!*" method="removeUmUsuario"   class="mapIntelligence.RemoverUsuarioAction">
      <result name="erroServicoUsuario">/erroServicoUsuario.jsp</result>
      <result>/usuario.jsp</result>
</action>

applicationContext.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">

    <bean
        class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />

    
 
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="persistenceUnitName" value="punit"></property>
    <property name="dataSource" ref="dataSource"></property>
    <property name="jpaDialect">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"></bean>
    </property>
    <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                  <property name="database" value="MYSQL"></property>
                  <property name="showSql" value="true"></property>
                  <property name="generateDdl" value="true"></property>
            </bean>
      </property>
</bean>

    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://teste/teste" />
        <property name="username" value="teste" />
        <property name="password" value="teste" />
    </bean>

<bean id="transactionManager"                                     class="org.springframework.orm.jpa.JpaTransactionManager">
      <property name="entityManagerFactory" ref="entityManagerFactory"></property>
      <property name="dataSource" ref="dataSource"></property>
</bean>

    <tx:annotation-driven transaction-manager="transactionManager" />

 <bean id="loginDao" class="mapIntelligence.LoginDAO">
      <constructor-arg ref="entityManagerFactory"></constructor-arg>
</bean>   

<bean id="usuarioDao" class="mapIntelligence.UsuarioDAO">
       <constructor-arg ref="entityManagerFactory"></constructor-arg>
</bean>
    
<bean id="servicoLogin" class="mapIntelligence.LoginImpl" scope="singleton">
      <property name="loginDAO" ref="loginDao"></property>
</bean>    

<bean id="servicoUsuario" class="mapIntelligence.UsuarioImpl" scope="singleton">
      <property name="usuarioDAO" ref="usuarioDao"></property>
</bean>    
    
<bean id="login" class="mapIntelligence.LoginAction" scope="prototype">
      <property name="servico" ref="servicoLogin"></property>
</bean>    


 <bean id="removeUsuario" class="mapIntelligence.RemoverUsuarioAction"   scope="prototype">
         <property name="servico" value="servicoUsuario"></property>
</bean>

 <bean id="insereUsuario" class="mapIntelligence.InsereUsuarioAction"   scope="prototype">
         <property name="servico" value="servicoUsuario"></property>
</bean>

 <bean id="listaUsuarios" class="mapIntelligence.ListaUsuariosAction"   scope="prototype">
         <property name="servico" value="servicoUsuario"></property>
</bean>


</beans>

Desculpe-me, mas não entendi. VocÊ poderia me mostrar um exemplo do que estou fazendo errado?

Muito obrigado,

Criado 28 de abril de 2008
Ultima resposta 28 de abr. de 2008
Respostas 4
Participantes 3