机器不会骗人,楼主仔细检查下,nullpointexception 应该比较好搞定。

解决方案 »

  1.   

    我用的是  struts2 和 hibernate3 spring3 结合的  这个结合只是把几个jar包放在一起  没有整合   那个代码怎么发嘛  发上来是乱的到嘛
      

  2.   

    userdao接口的内容
    package com.lovo.dao;import com.lovo.po.User;public interface UserDao {
    public void saveUser(User u);
    public void findUsersById(String id);
    public int findUser(User u);
    }
      

  3.   

    userdaoimpl
    package com.lovo.dao;import java.util.List;import org.hibernate.Query;
    import org.hibernate.Session;import com.lovo.po.User;
    import com.lovo.util.HibernateUtil;public class UserDaoImpl implements UserDao{
    @Override
    public void saveUser(User u) {
    // System.out.println("qianmian");
    HibernateUtil.getCurrentSession().save(u);
    } @Override
    public void findUsersById(String id) {

    } @Override
    public int findUser(User u) {
    System.out.println("u="+u.getName());
    Session session = HibernateUtil.getCurrentSession();
    Query query = session.createQuery("from User u where u.name = ? and u.password = ?");
    query.setString(0, u.getName());
    query.setString(1, u.getPassword());
    List<User> list = query.list();
    System.out.println(list.size());
    return 1;
    }
    }
      

  4.   

    这个类是切面 
    package com.lovo.transaction;import org.aspectj.lang.ProceedingJoinPoint;import com.lovo.util.HibernateUtil;public class Transaction {
            //这个方法是要切进去的方法 也就是开启事务的方法
    public void doAround(ProceedingJoinPoint pjp) throws Throwable{
    System.out.println("进入了");
    HibernateUtil.getCurrentSession().beginTransaction().begin();
    pjp.proceed();
    HibernateUtil.getCurrentSession().beginTransaction().commit();
    }

    public void d(){
    System.out.println("进入了");
    }
    }
    这个是useraction
    package com.lovo.action;import org.apache.struts2.ServletActionContext;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;import com.lovo.po.User;
    import com.lovo.service.UserService;
    import com.lovo.service.UserServiceImpl;
    import com.lovo.transaction.Transaction;public class UserAction {
    private static ApplicationContext  ac;
    static {
    ac = new ClassPathXmlApplicationContext("applicationContext.xml");
    }
    private User user;


    private UserServiceImpl usi = new UserServiceImpl();

    public User getUser() {
    return user;
    }
    public void setUser(User user) {
    this.user = user;
    } private UserService us;


    public UserService getUs() {
    return us;
    }
    public void setUs(UserService us) {
    this.us = us;
    }
    public String saveUser() throws Exception{
    // ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
    us = (UserService)ac.getBean("usi");
    // System.out.println("us="+us);
    us.saveUser(user);
    return "success";
    }

    public String login() throws Exception{
    // ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
    String str  = "lose";
    us = (UserService)ac.getBean("usi");
    System.out.println("us="+us);
    System.out.println("user="+user);
    int i = us.findUser(user);
    if(i>0){
    ServletActionContext.getRequest().getSession().setAttribute("user", user);
    str = "loginSuccess";
    }
    return str;
    }

    public static void main(String[] args) {
    ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
    Transaction us = (Transaction)ac.getBean("transaction");
    System.out.println("us="+us);
    }
    }这个是hibernate工具类
    package com.lovo.util;import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    import org.hibernate.tool.hbm2ddl.SchemaExport;public class HibernateUtil {
    private static SessionFactory sf;
    private static Configuration cfg;

    public static Configuration getCfg() {
    return cfg;
    } public static void setCfg(Configuration cfg) {
    HibernateUtil.cfg = cfg;
    } static{ 
    cfg = new Configuration().configure();
    sf = cfg.buildSessionFactory();
    }

    public static Session getSession(){
    return sf.openSession();
    }

    public static Session getCurrentSession(){
    // System.out.println(sf);
    return sf.getCurrentSession();
    }

    public static void createTable(){
    SchemaExport se = new SchemaExport(cfg);
    se.create(true, true);
    }

    public static final ThreadLocal<Session> session = new ThreadLocal<Session>();
    public static Session currentSession(){
    Session s = session.get();
    if(s==null){
    s = sf.openSession();
    session.set(s);
    }
    return s;
    }

    public static void closeSession(){
    Session s = session.get();
    session.set(null);
    if(s!=null){
    s.close();
    session.remove();
    }
    }
    }
    这个是UserService接口
    package com.lovo.service;import com.lovo.po.User;public interface UserService {
    public void saveUser(User u);

    public void findUsersById(String id);

    public int findUser(User u);
    }这个是UserServiceImpl类
    package com.lovo.service;import com.lovo.dao.UserDao;
    import com.lovo.po.User;public class UserServiceImpl implements UserService{

    private UserDao ud; public UserDao getUd() {
    return ud;
    } public void setUd(UserDao ud) {
    this.ud = ud;
    } @Override
    public void saveUser(User u) {
    ud.saveUser(u);
    } @Override
    public void findUsersById(String id) {
    ud.findUsersById(id);
    } @Override
    public int findUser(User u) {
    System.out.println("ud="+ud);
    return ud.findUser(u);
    }}
      

  5.   

    这是spring的配置文件<?xml version="1.0" encoding="UTF-8"?>
    <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"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
               http://www.springframework.org/schema/aop 
               http://www.springframework.org/schema/aop/spring-aop.xsd">  <bean id="udi" class="com.lovo.dao.UserDaoImpl">
      
      </bean>
     
      <bean id="gdi" class="com.lovo.dao.GroupDaoImpl">
      
      </bean>
      
      <bean id="pdi" class="com.lovo.dao.PhoneDaoImpl">
      
      </bean>  <bean id="usi" class="com.lovo.service.UserServiceImpl">
       <property name="ud" ref="udi"></property>
      </bean>  <bean id="gsi" class="com.lovo.service.GroupServiceImpl">
       <property name="gd" ref="gdi"></property>
      </bean>
      
      <bean id="psi" class="com.lovo.service.PhoneServiceImpl">
       <property name="pd" ref="pdi"></property>
      </bean>
      
      
      
      <bean id="transaction" class="com.lovo.transaction.Transaction">
      
      </bean>
      <aop:config>
       <aop:pointcut expression="execution(* com.lovo.service.*.*(..))" id="service"/>
       <aop:aspect id="tr" ref="transaction">
       <aop:around method="doAround" pointcut-ref="service"/>
       </aop:aspect>
      </aop:config>
     
    </beans>
      

  6.   


         
        public String login() throws Exception{
    //        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
            String str  = "lose";
            us = (UserService)ac.getBean("usi");
            System.out.println("us="+us);
            System.out.println("user="+user);
            int i = us.findUser(user);
            if(i>0){
                ServletActionContext.getRequest().getSession().setAttribute("user", user);
                str = "loginSuccess";
            }
            return str;
        }
    user 能打印出值吗,应该是user的问题
      

  7.   

    能打印出  大神帮帮忙吧!明天就要交了
    这个是登录页面  我用的是struts2  能输出user的值 
    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <!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>登录</title>
    </head>
    <body>
    <form action="userAction-login" method="post">
    account:<input type="text" name="user.name" maxlength="20"/><br/>
    password:<input type="password" name="user.password" maxlength="16"/><br/>
    <input type="submit" value="提交"/>
    </form>
    </body>
    </html>
      

  8.   

    打个断点跟一下,不是user就是us了
      

  9.   

    都有值呀,但是他都是要报nullPointException 这是打印出来的结果
    us=com.lovo.service.UserServiceImpl@ffc3eb
    user=com.lovo.po.User@1978933
    进入了
    ud=com.lovo.dao.UserDaoImpl@5e7663
    u=李四
    Hibernate: select user0_.u_id as u1_0_, user0_.u_name as u2_0_, user0_.u_parent as u3_0_, user0_.u_password as u4_0_, user0_.g_id as g5_0_ from tb_users user0_ where user0_.u_name=? and user0_.u_password=?
    1
    2013-11-28 22:54:05 org.apache.struts2.dispatcher.Dispatcher error
    严重: Exception occurred during processing request: null
    java.lang.NullPointerException
    at com.sun.proxy.$Proxy6.findUser(Unknown Source)
    at com.lovo.action.UserAction.login(UserAction.java:58)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      

  10.   

    能保存user到数据库  也能把他从数据库查询出来   感觉没有哪里有对象是null的
      

  11.   

    打断点跟一下吧,看具体哪个对象是空的
    int i = us.findUser(user); 这一步执行不下去吧
      

  12.   


    us = (UserService)ac.getBean("usi");这个获取的us是null,所以
    int i = us.findUser(user);这里就报了nullpoint
      

  13.   

    检查一下切面里,process后得到事务那行代码有问题
      

  14.   

    谢谢大家的帮助  问题解决了  是切面类Transaction的doAround方法应该有个返回值  
    return pjp.proceed();