<input type="text" name="username" value="${user.username}"/>
改成
<input type="text" name="user.username" value="${user.username}"/>密码一样的道理。改下

解决方案 »

  1.   

    大神,我改了,还是空指针,package com.myEdition.action;import java.io.IOException;
    import java.sql.SQLException;
    import java.util.Map;import javax.annotation.Resource;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;import org.springframework.context.ApplicationContext;
    import org.springframework.context.annotation.Scope;
    import org.springframework.context.support.FileSystemXmlApplicationContext;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.servlet.ModelAndView;import com.myEdition.bean.User;
    import com.myEdition.dao.UserDAO;
    import com.myEdition.dao.impl.UserDAOImpl;
    import com.myEdition.domain.Regedit;
    import com.myEdition.domain.impl.Regeditlmpl;
    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionSupport;@SuppressWarnings("serial")
    @Controller("RegeditAction")@Scope("prototype")
    public class RegeditAction extends ActionSupport {

    //定义接口Regedit
    @Resource

    private  User user;
    private Regeditlmpl RegeditImpl;

    private String username;
    private String password;
     
     public String getUsername() {
    return username;
    } public void setUsername(String username) {
    this.username = username;
    } public String getPassword() {
    return password;
    } public void setPassword(String password) {
    this.password = password;
    }

    public User getUser(){
    return user;
    }

    public void setUser(User user){
    this.user=user;

    }

    public void reg(String username,String password){
    user.setPassword(password);
    user.setUsername(username);

    }

    /*public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8"); 
    HttpSession session = request.getSession(); 
    //获取参数名称 

    String username = request.getParameter("username"); 
    String password = request.getParameter("password"); 

    user.setUsername(username);
    user.setPassword(password);
    session.setAttribute("user", user);
    RegeditImpl.saveUser(user);
    //return "regedit";
    request.getRequestDispatcher("regedit.jsp").forward(request, response);
    }*/


    public String execute(){
    //保存用户提交的信息
    User user1 = RegeditImpl.find(this.getPassword(), this.getUsername());
    if(user!=null){
    Map session=(Map)ActionContext.getContext().getSession();
    session.put("user1", user1);
    RegeditImpl.saveUser(user);
    //User user1 = RegeditImpl.find(user.getPassword(), user.getUsername());

    return "regedit";
    //返回页面
    }
    else 
    return null;

    }
    /*
    public String regedit(){
    System.out.println(user.getUsername());
    User user1=new User();
    user1.setId(user.getId());
    user1.setPassword(user.getPassword());
    user1.setUsername(user.getUsername());
    regedit.saveUser(user1);
    return "regedit";
    }*/


    public Regeditlmpl getRegeditImpl() {
    return RegeditImpl;
    } public void setRegeditImpl(Regeditlmpl regeditImpl) {
    RegeditImpl = regeditImpl;
    }


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

    ApplicationContext context = new FileSystemXmlApplicationContext("src/applicationContext.xml");
    User user2 = new User();
    //user2.setId(1);
    user2.setPassword("456red");
    user2.setUsername("zzqweas");
    UserDAO userDao = (UserDAO)context.getBean("UserDAOImpl");
    userDao.insert(user2);
    }*/
    /*public static void main(String[]args){
    System.out.println(new RegeditAction().user);
    }*/
    }
    上面是我action代码,你看有错误没??
      

  2.   

    两种解决方式:
    一种像1L所说;
    第二种在action中 implements ModelDriven<User>并覆写
            public User getModel() {
    return this.model;
    }去掉private  User user;和user的set、get方法
      

  3.   


    //定义接口Regedit
    @Resource放到
    private Regeditlmpl RegeditImpl;上面如:
     private  User user;
     //定义接口Regedit
     @Resource
     private Regeditlmpl RegeditImpl;前台按1L所说修改!
      

  4.   

    关键哪是空指针,user=null?
    还是find方法里的某句空指针?
      

  5.   

    我是按楼那样做的,usename和password值可以接收到,但是我调试发现Id为空,数据库我设的id为自动增长,最后报错 RegeditImpl.saveUser(user);为空指针,这是可能是什么原因造成的呢?求大神指点!!
      

  6.   

    RegeditImpl.saveUser(user);这一句空指针
      

  7.   

    package com.myEdition.action;import java.io.IOException;
    import java.sql.SQLException;
    import java.util.Map;import javax.annotation.Resource;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;import org.springframework.context.ApplicationContext;
    import org.springframework.context.annotation.Scope;
    import org.springframework.context.support.FileSystemXmlApplicationContext;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.servlet.ModelAndView;import com.myEdition.bean.User;
    import com.myEdition.dao.UserDAO;
    import com.myEdition.dao.impl.UserDAOImpl;
    import com.myEdition.domain.Regedit;
    import com.myEdition.domain.impl.Regeditlmpl;
    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionSupport;@SuppressWarnings("serial")
    @Controller("RegeditAction")@Scope("prototype")
    public class RegeditAction extends ActionSupport {

    //定义接口Regedit
    @Resource

    private  User user;
    private Regeditlmpl RegeditImpl;

    private String username;
    private String password;
     
    public void setUsername(String username) {
    this.username = username;
    }

     public String getUsername() {
    return username;
    } public void setPassword(String password) {
    this.password = password;
    }
    public String getPassword() {
    return password;
    }
    public User getUser(){
    return user;
    }

    public void setUser(User user){
    this.user=user;

    }

    /*public void reg(String username,String password){
    user.setPassword(password);
    user.setUsername(username);

    }*/

    /*public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8"); 
    HttpSession session = request.getSession(); 
    //获取参数名称 

    String username = request.getParameter("username"); 
    String password = request.getParameter("password"); 

    user.setUsername(username);
    user.setPassword(password);
    session.setAttribute("user", user);
    RegeditImpl.saveUser(user);
    //return "regedit";
    request.getRequestDispatcher("regedit.jsp").forward(request, response);
    }*/


    public String execute(){
    //保存用户提交的信息

    //User user1 = RegeditImpl.find(this.getPassword(), this.getUsername());
    if(user!=null){
    Map session=(Map)ActionContext.getContext().getSession();
    session.put("user1", user);
    RegeditImpl.saveUser(user);
    //User user1 = RegeditImpl.find(user.getPassword(), user.getUsername());

    return "regedit";
    //返回页面
    }
    else 
    return "regedit";

    }
    /*
    public String regedit(){
    System.out.println(user.getUsername());
    User user1=new User();
    user1.setId(user.getId());
    user1.setPassword(user.getPassword());
    user1.setUsername(user.getUsername());
    regedit.saveUser(user1);
    return "regedit";
    }*/


    public Regeditlmpl getRegeditImpl() {
    return RegeditImpl;
    } public void setRegeditImpl(Regeditlmpl regeditImpl) {
    RegeditImpl = regeditImpl;
    }


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

    ApplicationContext context = new FileSystemXmlApplicationContext("src/applicationContext.xml");
    User user2 = new User();
    //user2.setId(1);
    user2.setPassword("456red");
    user2.setUsername("zzqweas");
    UserDAO userDao = (UserDAO)context.getBean("UserDAOImpl");
    userDao.insert(user2);
    }*/
    /*public static void main(String[]args){
    System.out.println(new RegeditAction().user);
    }*/
    }
      

  8.   

    我是按楼那样做的,usename和password值可以接收到,但是我调试发现Id为空,数据库我设的id为自动增长,最后报错 RegeditImpl.saveUser(user);为空指针,这是可能是什么原因造成的呢?求大神指点!!和id没关系,是因为RegeditImpl这个为null,造成的,你spring相关注解写错了
      

  9.   

    大神这样做不中啊,就是在保存的时候出现空指针,debug看除了id外username、password都有值,数据库设id为自动增长的,大神觉得是什么问题??
      

  10.   

    //定义接口Regedit
     @Resource private  User user;
     private Regeditlmpl RegeditImpl;这个你还是没有改! 你把@Resource 放到
    private Regeditlmpl RegeditImpl; 上面! 不用注入User对象,应该注入DAO或Manager层!
    改成 private  User user;
     @Resource
     private Regedit RegeditImpl; //这里最好用接口,而不用具体实现类!
      

  11.   

    public class RegeditAction extends ActionSupport {

    //定义接口Regedit
    private  User user;
    @Resource
    private Regeditlmpl RegeditImpl;

    private String username;
    private String password;
     这样吧?这样还是解决不了问题
      

  12.   

    我是按楼那样做的,usename和password值可以接收到,但是我调试发现Id为空,数据库我设的id为自动增长,最后报错 RegeditImpl.saveUser(user);为空指针,这是可能是什么原因造成的呢?求大神指点!!和id没关系,是因为RegeditImpl这个为null,造成的,你spring相关注解写错了我把几个层的代码给你看看,哪个注解写错了?【controller

    package com.myEdition.action;import java.io.IOException;
    import java.sql.SQLException;
    import java.util.Map;import javax.annotation.Resource;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.annotation.Scope;
    import org.springframework.context.support.FileSystemXmlApplicationContext;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.servlet.ModelAndView;import com.myEdition.bean.User;
    import com.myEdition.dao.UserDAO;
    import com.myEdition.dao.impl.UserDAOImpl;
    import com.myEdition.domain.Regedit;
    import com.myEdition.domain.impl.Regeditlmpl;
    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionSupport;@SuppressWarnings("serial")
    @Controller("RegeditAction")@Scope("prototype")
    public class RegeditAction extends ActionSupport {

    //定义接口Regedit
    private  User user;
    @Resource
    private Regeditlmpl RegeditImpl;

    private String username;
    private String password;
     
    public void setUsername(String username) {
    this.username = username;
    }

     public String getUsername() {
    return username;
    } public void setPassword(String password) {
    this.password = password;
    }
    public String getPassword() {
    return password;
    }
    public User getUser(){
    return user;
    }

    public void setUser(User user){
    this.user=user;

    }

    /*public void reg(String username,String password){
    user.setPassword(password);
    user.setUsername(username);

    }*/

    /*public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8"); 
    HttpSession session = request.getSession(); 
    //获取参数名称 

    String username = request.getParameter("username"); 
    String password = request.getParameter("password"); 

    user.setUsername(username);
    user.setPassword(password);
    session.setAttribute("user", user);
    RegeditImpl.saveUser(user);
    //return "regedit";
    request.getRequestDispatcher("regedit.jsp").forward(request, response);
    }*/


    public String execute(){
    //保存用户提交的信息

    //User user1 = RegeditImpl.find(this.getPassword(), this.getUsername());
    if(user!=null){
    Map session=(Map)ActionContext.getContext().getSession();
    session.put("user1", user);
    RegeditImpl.saveUser(user);
    //User user1 = RegeditImpl.find(user.getPassword(), user.getUsername());

    return "regedit";
    //返回页面
    }
    else 
    return "regedit";

    }
    /*
    public String regedit(){
    System.out.println(user.getUsername());
    User user1=new User();
    user1.setId(user.getId());
    user1.setPassword(user.getPassword());
    user1.setUsername(user.getUsername());
    regedit.saveUser(user1);
    return "regedit";
    }*/


    public Regeditlmpl getRegeditImpl() {
    return RegeditImpl;
    } public void setRegeditImpl(Regeditlmpl regeditImpl) {
    RegeditImpl = regeditImpl;
    }


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

    ApplicationContext context = new FileSystemXmlApplicationContext("src/applicationContext.xml");
    User user2 = new User();
    //user2.setId(1);
    user2.setPassword("456red");
    user2.setUsername("zzqweas");
    UserDAO userDao = (UserDAO)context.getBean("UserDAOImpl");
    userDao.insert(user2);
    }*/
    /*public static void main(String[]args){
    System.out.println(new RegeditAction().user);
    }*/
    }【service】package com.myEdition.domain.impl;import javax.annotation.Resource;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
    import org.springframework.stereotype.Service;
    import org.springframework.transaction.annotation.Transactional;
    import com.myEdition.bean.User;
    import com.myEdition.dao.UserDAO;
    import com.myEdition.dao.impl.UserDAOImpl;
    import com.myEdition.domain.Regedit;@Transactional
    @Service
    public class Regeditlmpl  implements Regedit{
    private String msg;
    @Resource
    private UserDAOImpl UserDAOImpl;



    public UserDAOImpl getUserDAOImpl() {
    return UserDAOImpl;
    }
    public void setUserDAOImpl(UserDAOImpl userDAOImpl) {
    UserDAOImpl = userDAOImpl;
    }
    public void setMsg(String msg) {
    this.msg = msg;
    }
    //删除用户
    public void deleteUser(User user) {
    UserDAOImpl.delete(user);
    }
    //获取是否保存成功信息
    public String getMsg() {

    return msg;
    }
    //保存用户
    public void saveUser(User user) {
    UserDAOImpl.insert(user);
    msg="注册成功!";

    }
    //修改用户
    public void updateUser(User user) {
    UserDAOImpl.update(user);

    }

    //查询用户

    public User find(String username,String password){
    return UserDAOImpl.find(username, password);
    }
    public void insert(User user) {
    // TODO Auto-generated method stub

    }




    }【DAO】package com.myEdition.dao.impl;
    import java.util.List;
    import javax.annotation.Resource;import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
    import org.springframework.stereotype.Repository;
    import com.resource.AppContext;
    import com.myEdition.bean.User;
    import com.myEdition.dao.UserDAO;
    @Repositorypublic class UserDAOImpl extends HibernateDaoSupport implements UserDAO{
    //@Resource
    //private SessionFactory sessionFactory;
    /*private Session getSession(){
    return sessionFactory.getCurrentSession();
    }*/
    /*public Session getSession(){
    return sessionFactory.getCurrentSession();
    }

    private static UserDAO UserDAO;
    public UserDAOImpl() {
    super();
    }

    public static UserDAO  getInstance(){
    if(UserDAO==null){
    UserDAO=(UserDAO)AppContext.getInstance().getAppContext().getBean("UserDAO"); 
    }
    return UserDAO;
    }*/

    /*public void setSessionFactory(SessionFactory sessionFactory){
    this.sessionFactory=sessionFactory;
    }*/

    //Session session=sessionFactory.openSession();

    private String hql="from User u where u.username = ?";
    //删除用户
    public void delete(User user) {
    getHibernateTemplate().delete(user);

    }
    //新增用户
    public void insert(User user) {
    getHibernateTemplate().save(user);

    }
    //查询用户
    public User find(String username,String password) {
    /*User user = null;
    List users = getSession().createQuery(hql).setParameter(0, name).list();
    if(users.size()!=0){
    user=(User)users.get(0);
    }*/
    String str[]={username,password};
    List list = getHibernateTemplate().find("from user where username=? and password=?",str);
    if(list.size()>0)
    return (User)list.get(0);
    else return null;

    //return user;
    }
    //修改用户
    public void update(User user) {

    getHibernateTemplate().update(user);

    }
    public List query(String name) {
    // TODO Auto-generated method stub
    return null;
    }

    //注入sevice





    }
      

  13.   

    private Regeditlmpl RegeditImpl; 红色部分不要直接用具体实现类,应该使用接口! 
    再不行你把@Resource 改成@Autowired 试试!
      

  14.   

    @Controller("RegeditAction")@Scope("prototype")
    public class RegeditAction extends ActionSupport {

    //定义接口Regedit
    private  User user;
    @Autowired
    private Regedit Regedit;

    已改过,无济于事
      

  15.   

    我把配置发给你们看看<?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:context="http://www.springframework.org/schema/context"
    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-3.0.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.0.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
    http://www.springframework.org/schema/aop  http://www.springframework.org/schema/aop/spring-p-3.0.xsd

    ">


    <!--  启用自动扫描
    <context:component-scan base-package="com.myEdition"></context:component-scan> -->
    <!-- 事务管理  -->
    <!-- 以下的被注释
    <tx:annotation-driven transaction-manager="transactionManger"/>
    <bean id="transactionManger" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>
     -->
    <bean id="dataSource"
    class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName"
    value="com.mysql.jdbc.Driver">
    </property>
    <property name="url"
    value="jdbc:mysql://localhost:3306/myedition">
    </property>
    <property name="username" value="root"></property>
    <property name="password" value="root"></property>
    </bean>
    <bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource">
    <ref bean="dataSource"></ref>
    </property>
    <property name="hibernateProperties">
    <props>
    <prop key="hibernate.dialect">
    org.hibernate.dialect.MySQLDialect
    </prop>
     <prop key="hibernate.hbm2ddl.auto">update</prop>
    <prop key="hibernate.show_sql">true</prop>
    </props>
    </property>
    <property name="mappingResources">
    <list>
       <value>com/myEdition/bean/Content.hbm.xml</value>
      <value>com/myEdition/bean/ContentType.hbm.xml</value>  
      <value>com/myEdition/bean/User.hbm.xml</value>  
    </list>
    </property>

    </bean>


     
     
     <bean id="transactionManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory">
    <ref local="sessionFactory" />
    </property>
    </bean><!-- 配置事务拦截器 -->
    <bean id="transactionInterceptor"  class="org.springframework.transaction.interceptor.TransactionInterceptor">
    <!--事务拦截器BEAN需要依赖注入一个事物管理器 -->
    <property name="transactionManager" ref="transactionManager"/>
    <property name="transactionAttributes">
    <!-- 定义事物传播属性 -->
    <props>
    <prop key="delete*"> PROPAGATION_REQUIRED</prop>
    <prop key="insert*"> PROPAGATION_REQUIRED</prop>
    <prop key="update*"> PROPAGATION_REQUIRED</prop>
    <prop key="save*"> PROPAGATION_REQUIRED</prop>
    <prop key="find*"> PROPAGATION_REQUIRED</prop>
    <prop key="get*"> PROPAGATION_REQUIRED</prop>
    <prop key="*"> PROPAGATION_REQUIRED</prop>
    </props>
    </property>
    </bean><!-- 定义BeanNameAutoProxyCreator,该bean是个bean后处理器,无需被引用,因此没有id属性这个bean后处理器,根据事务拦截器为目标bean自动创建事务代理--><bean id="userDAOProxy" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
    <!-- 指定哪些bean自动生成业务代理 --><property name="beanNames">
    <!--   下面是所有需要自动创建事务代理的bean-->
    <list>
    <value>RegeditImpl</value>
    <value></value>
    <value></value>
    </list>
    </property>
    <!--   下面定义BeanNameAutoProxyCreator所需的事务拦截器-->
    <property name="interceptorNames">
    <list>
    <value>transactionInterceptor</value></list>
    </property>
    </bean> <!--spring beanName dao层的beanName -->
       <bean id="UserDAOImpl" class="com.myEdition.dao.impl.UserDAOImpl">
      <property name="sessionFactory" ref="sessionFactory"></property>
     </bean>  <bean id="ContentTypeDAOImpl" class="com.myEdition.dao.impl.ContentTypeDAOImpl">
      <property name="sessionFactory" ref="sessionFactory"></property>
     </bean>
     
     <bean id="ContentDAOImpl" class="com.myEdition.dao.impl.ContentDAOImpl">
     <property name="sessionFactory" ref="sessionFactory"></property>
     </bean>
     <!-- spring容器管理业务逻辑层service -->
      <bean id="RegeditImpl" class="com.myEdition.domain.impl.Regeditlmpl">
     <property name="UserDAOImpl" ref="UserDAOImpl"></property>
     </bean>
     
     <bean id="SetContentTypeImpl" class="com.myEdition.domain.impl.SetContentTypeImpl">
     <property name="ContentTypeDAOImpl" ref="ContentTypeDAOImpl"></property>
     </bean>
     <bean id="EditImpl" class="com.myEdition.domain.impl.EditImpl">
     <property name="ContentDAOImpl" ref="ContentDAOImpl"></property>
     </bean>
      <!-- spring容器管理action 
     <bean id="RegeditAction" class="com.myEdition.action.RegeditAction">
     <property name="RegeditImpl" ref="RegeditImpl"></property>
     </bean>
     <bean id="ContentTypeAction" class="com.myEdition.action.ContentTypeDAOImpl">
     <property name="SetContentTypeImpl" ref="SetContentTypeImpl"></property>
     </bean>
     -->
    </beans>
      

  16.   

    你是想用注解bean还是手动注入bean!
    如果注解把
    <context:component-scan base-package="com.myEdition"></context:component-scan> 
    不要注释!
    把下面的那些
    <bean id="UserDAOImpl" class="com.myEdition.dao.impl.UserDAOImpl">
    这些类全部给注释掉!!!!在Regeditimpl中的saveUser()方法中加一个断点,看能进去不! 
      

  17.   

    建议看下spring注解注入!
    http://lvqionghua.blog.163.com/blog/static/185277420116113816675/