0 0

Struts2+Spring+JPA+FREEMARKER 登录程序错误5

一段基于Struts2+Spring+JPA+FREEMARKER登录程序,总是跳出java.lang.NullPointerException错误!

 

数据结构如下:

 

create table SYSUSER
(
  loginid      VARCHAR2(20) not null,
  pwd          VARCHAR2(20),
 )

 STRUTS2配置如下:

 

<action name="userlogin" class="LoginAction">
            <result name="loginsuccess" type="freemarker">/WEB-INF/templates/user.ftl</result>        
            <result name="errorlogin" type="freemarker">/WEB-INF/templates/admin/login.ftl</result>
                </action>

 ACTION如下:

 

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.office.model.Sysuser;
import com.office.service.SysuserService;
import com.office.util.ChanageLetter;
import com.office.util.MD5;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport{
  private String loginid;
  private String pwd;
  private String checkcode;
  private Sysuser sysuser;
  private ArrayList<Sysuser> sysusers;
  
public ArrayList<Sysuser> getSysusers() {
    return sysusers;
}
public void setSysusers(ArrayList<Sysuser> sysusers) {
    this.sysusers = sysusers;
}
private SysuserService sysuserService;
public SysuserService getSysuserService() {
    return sysuserService;
}
public void setSysuserService(SysuserService sysuserService) {
    this.sysuserService = sysuserService;
}
 
  public String execute() throws Exception{
 
      ActionContext actionContext = ActionContext.getContext();
      Map<?, ?> session = actionContext.getSession();                
      String code = ChanageLetter.chg(session.get("rand").toString());
          MD5 md5 = new MD5();  
        String pwd=md5.getMD5ofStr(this.getPwd());
        String um=this.getLoginid();
        this.setSysusers(this.sysuserService.find(um, pwd));
        System.out.println(this.sysusers);
        System.out.println(this.sysusers.size());
         
        if(0==this.sysusers.size()){
            return "errorlogin";
        }
        else{
         
            return "loginsuccess";
        }
         
        
  }
   
    public String getLoginid() {
        return loginid;
    }
    public void setLoginid(String loginid) {
        this.loginid = loginid;
    }
    public String getPwd() {
        return pwd;
    }
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
 
    public String getCheckcode() {
        return checkcode;
    }
 
     
    public void setCheckcode(String checkcode) {
        this.checkcode = checkcode;
    } 
}

 MODEL如下:

 

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
 
@Entity
@Table(name = "SYSUSER", schema = "TEST")
public class Sysuser implements java.io.Serializable {
 
    private String loginid; 
    private String pwd;        
 
    @Id
    @Column(name = "LOGINID", unique = true, nullable = false, length = 20)
    public String getLoginid() {
        return this.loginid;
    }
    public void setLoginid(String loginid) {
        this.loginid = loginid;
    }
    @Column(name = "PWD", length = 20)
    public String getPwd() {
        return this.pwd;
    }
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
}

 SERVICE如下:

 

import java.util.ArrayList;
import java.util.List;
public interface SysuserService {
    public void save(Sysuser sysuser);
 
    public void delete(Sysuser sysuser);
 
    public void update(Sysuser sysuser);    
         
    public ArrayList<Sysuser> find(final String username, final String password);
     
 
}
 
 
 
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.springframework.transaction.annotation.Transactional;
 
@Transactional
public class SysuserServiceImpl implements SysuserService {    
    private EntityManager entityManager;
    public void delete(Sysuser sysuser) {
        sysuser = entityManager.getReference(Sysuser.class, sysuser.getLoginid());
        entityManager.remove(sysuser);
    }    
    public void save(Sysuser sysuser) {
        entityManager.persist(sysuser);
    }
    public void update(Sysuser sysuser) {
        entityManager.merge(sysuser);
    }
 
    public ArrayList<Sysuser> find(String username, String password) {
        String jpql="select u from Sysuser u where u.loginid like :username and u.pwd like :password";
        Query query=getEntityManager().createQuery(jpql);
        query.setParameter("username", username);
        query.setParameter("password", password);
        List<Sysuser> list=query.getResultList();        
        return (ArrayList<Sysuser>) list;
    }    
    public EntityManager getEntityManager() {
        return entityManager;
    }    
    @PersistenceContext
    public void setEntityManager(EntityManager entityManager) {
        this.entityManager = entityManager;
    }
}

 


问题补充:抛出异常:
十二月 04, 2012 6:03:11 下午 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet default threw exception
java.lang.NullPointerException
    at com.office.action.LoginAction.execute(LoginAction.java:41)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

2012年12月05日 08:03

7个答案 按时间排序 按投票排序

0 0

采纳的答案

空指针是因为没有实现注入,你使用的JPA首先应该在loginAction上加入注解@Controller
和@Scope(“prototype”),并且action的service童养需要加入注解@Resource(name = "SysuserService "),同时service的实现类上也需要加入注解@Service("SysuserService ")还有事务,你的代码上好像都没有加,所以spring是不会注入的,因此LoginAction中SysuserServiceImpl就是空

2012年12月05日 17:26
0 0

2012年12月05日 16:44
0 0

private ArrayList<Sysuser> sysusers = new ArrayList<Sysuser>();ok,应该是该变量为空

2012年12月05日 13:42
0 0

1、你的action定义时没有写包

2、<action name="userlogin" class="LoginAction">   因此由struts2直接new的  所以没有享受到spring管理,即没有注入sysuserService

3、改 class="loginAction”  然后在spring中定义

2012年12月05日 12:21
0 0

service没有注入,看你使用的注解, SysuserServiceImpl上面加上@Service试试

2012年12月05日 11:23
0 0

查看spring中是否在action中注入了sysuserService

2012年12月05日 10:59
0 0

this.setSysusers(this.sysuserService.find(um, pwd)); 
先查下um pwd传的是啥值,对应后台数据库能否查到记录

2012年12月05日 10:53

相关推荐

    Struts2+Spring+Hibernet+JPA+sitemesh+log4j

    Struts2、Spring、Hibernate、JPA、SiteMesh和Log4j是Java Web开发中非常重要的六个组件,它们各自承担着不同的职责,并且在实际项目中经常被整合使用,形成了所谓的"SSH2"(Struts2 + Spring + Hibernate)框架组合...

    Struts 2 + Spring 2 + JPA + AJAX

    Spring 2 还包括对数据访问的支持,如 JDBC、Hibernate 和 JPA,以及对 Web 应用程序的支持,通过 Spring MVC 框架可以与 Struts 2 结合使用,提供更灵活的架构。 **JPA(Java Persistence API)** 是 Java 平台上...

    struts2+spring+hibernate 整合的jar包

    1. **Struts2**:Struts2是一个基于MVC设计模式的Web应用框架,用于构建可维护性高、结构清晰的Java应用程序。它提供了强大的拦截器机制,支持多种结果类型,如JSP、FreeMarker等,并且与Ajax集成良好。Struts2的...

    Struts2+Hibernate+Spring课件 张志峰版

    Struts2、Hibernate和Spring是Java企业级开发中三大核心框架,它们的组合通常被称为SSH(Struts2、Spring、Hibernate)集成框架。这个“Struts2+Hibernate+Spring课件 张志峰版”提供了深入学习这三大框架的宝贵资源...

    struts2+spring4+hibernate4工程搭建源码

    Struts2、Spring4和Hibernate4是Java Web开发中的三个核心框架,它们分别负责MVC模式中的表现层、业务层和服务层。这个"struts2+spring4+hibernate4工程搭建源码"提供了使用这三个框架集成开发的示例代码,对于学习...

    Struts2+Spring3+Hibernate4示例

    Struts2、Spring3和Hibernate4是Java Web开发中的三个核心框架,它们分别负责MVC(Model-View-Controller)架构中的控制层、业务层和服务层。本示例结合这三个框架,提供了一种完整的三层架构实现,以提高开发效率和...

    整合 Struts 2 + Spring 2 + JPA + AJAX

    Struts 2、Spring 2、JPA 和 AJAX 是四个在企业级 Java 开发中非常重要的技术组件。这篇博文的快速启动文件(quickstart)旨在帮助开发者整合这些技术,构建一个高效、灵活且功能丰富的 Web 应用程序。下面将分别...

    maven3+struts2+spring3+jpa2重构itcat巴巴运动网(前32讲)

    在本课程“maven3+struts2+spring3+jpa2重构itcat巴巴运动网(前32讲)”中,我们将深入探讨四个关键的技术框架,它们是Java开发中的核心工具,尤其在构建大型企业级应用时发挥着重要作用。这四个技术分别是Maven、...

    JPA+Spring+Struts整合实例,JPA+Spring+Struts整合实例

    在Java Web开发领域,JPA(Java Persistence API)、Spring框架和Struts框架的整合是常见的技术栈,它们各自扮演着不同的角色,共同构建出高效、灵活的Web应用程序。下面将详细介绍这三个关键技术及其整合过程。 **...

    Struts2.1+Spring3.0+JPA1.0 .pdf

    - 通常包括Struts2核心库、插件库以及其他第三方库如FreeMarker或Velocity等。 4. **配置Web.xml**: - 添加Struts2的Filter配置,用于拦截所有请求并进行处理。 ```xml &lt;filter-name&gt;struts2 &lt;filter-class&gt;...

    轻量级Java+EE企业应用实战——Struts+2+Spring+Hibernate整合开发电子书3.pdf

    《轻量级Java+EE企业应用实战——Struts 2 + Spring + Hibernate整合开发》是针对Java企业级应用开发的一本实战指南,旨在帮助开发者掌握使用Struts 2、Spring和Hibernate三大框架进行高效集成开发的技术与技巧。...

    Struts2+Hibernate+Spring整合开发深入剖析与范例应用04

    Struts2、Hibernate和Spring是Java企业级应用中三大核心框架,它们的整合使用能够构建出高效、可维护且松耦合的Web应用程序。在这个"Struts2+Hibernate+Spring整合开发深入剖析与范例应用04"的主题中,我们将探讨这...

    Struts2+Hibernate+Spring框架搭建(一)

    Struts2、Hibernate和Spring是Java Web开发中的三大框架,它们各自负责不同的职责,共同构建了一个强大的企业级应用架构。本篇文章将详细讲解如何利用这三个框架进行整合搭建,旨在为初学者提供一个清晰的入门指南。...

    Struts 2+Spring开发应用_免费

    Struts 2 和 Spring 是两种在 Java Web 开发中广泛使用的开源框架,它们结合使用可以构建高效、可扩展的企业级应用程序。Struts 2 主要负责 MVC(模型-视图-控制器)架构的设计,而 Spring 提供了依赖注入、事务管理...

    开发Struts 2+Spring应用

    5. 错误和异常处理:介绍如何在 Struts 2 和 Spring 中配置和处理错误及异常。 6. 测试和调试:可能包含如何编写单元测试和集成测试,以及调试 Struts 2 和 Spring 集成应用的技巧。 学习这个章节,开发者可以深入...

    struts2 spring hibernate框架技术与项目实战 光盘源码上

    Struts2、Spring和Hibernate是Java Web开发中的三大主流框架,它们各自负责应用程序的不同层面,协同工作可以构建出高效、可维护的复杂Web应用。在本资源中,"struts2 spring hibernate框架技术与项目实战 光盘源码 ...

    STRUTS2+SPRING+HIBERNATE集成

    4. **添加Struts 2支持**:手动导入Struts 2.0.11所需的jar包,如freemarker、ognl、struts2-core等。 5. **配置文件**:创建struts.xml文件,定义Action和包的扩展关系;修改web.xml,配置Struts 2的Filter ...

    struts2+hibernate+spring框架整合实列

    Struts2、Hibernate和Spring是Java Web开发中的三大主流框架,它们各自负责应用程序的不同层面:Struts2专注于表现层,Hibernate处理数据持久化,而Spring则在业务逻辑和依赖注入方面发挥重要作用。将这三个框架整合...

    struts2+spring2+hibernate3 Annotation的整合

    Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们各自负责不同的职责:Struts2专注于MVC(Model-View-Controller)架构的实现,Spring提供了强大的依赖注入(DI)和面向切面编程(AOP)功能,而...

    三大框架Struts2+Spring2.5+Hibernate3.5的整合开发

    在整合开发中,需要包含如`struts2-core`、`xwork`、`ognl`、`freemarker`、`commons-logging`、`commons-fileupload`以及Struts2与Spring、JSON的插件等必要的JAR文件。 Spring框架是一个全面的后端解决方案,它...

Global site tag (gtag.js) - Google Analytics