谁能帮我看一下,这些代码是否有错,这个是运行孙鑫《struts2深入详解》的例子时候发生的错误,首先数据库是mysql,mysql的驱动已经被放置到tomcat的lib目录下了,主要有三个java源代码,很可能有错,但是好多地方我看不懂代码的意思,所以不知道错在哪里。现在我把代码贴出如下:1.Uer.javapackage org.hhsh.struts2.action;import java.util.Date;import org.hhsh.struts2.persistence.dao.UserDao;
import org.hhsh.struts2.persistence.entity.User;import com.opensymphony.xwork2.ActionSupport;public class RegisterAction extends ActionSupport
{
private static final long serialVersionUID = 3970199804617664569L;
private User user;
private UserDao userDao;

/**
 * 在构造方法中初始化UserDao对象
 */
/*public RegisterAction()
{
userDao = new UserDao();
}*/

public void setUserDao(UserDao userDao)
{
this.userDao = userDao;
}

/**
 * 请求register!default.action,调用doDefault方法
 */
//@Override
public String doDefault() throws Exception
{
return INPUT;
} /**
 * 调用UserDao的register方法注册用户
 */
//@Override
public String execute() throws Exception
{
user.setRegDate(new Date()); //注意不要忘了设置注册日期
userDao.register(user);
return SUCCESS;
}

/**
 * 为user对象提供getter方法
 * @return
 */
public User getUser()
{
return user;
} /**
 * 为user对象提供setter方法
 * @param user
 */
public void setUser(User user)
{
this.user = user;
}
}2.UserDao.java
package org.hhsh.struts2.persistence.dao;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;import org.hhsh.struts2.persistence.entity.User;public class UserDao
{
private DataSource dataSource;

/**
 * 在构造方法中初始化数据源对象。
 */
public UserDao()
{
Context ctx;
try
{
ctx = new InitialContext();
dataSource=(DataSource)ctx.lookup("java:comp/env/jdbc/test");
}
catch (NamingException e)
{
e.printStackTrace();
}
}

/**
 * dataSource的访问器方法。
 * @return 数据源对象
 */
public DataSource getDataSource()
{
return dataSource;
}

/**
 * 实现用户注册功能,将用户信息保存到数据库表reg_user中。
 * @param user User对象,保存了用户提交的注册信息
 * @return 注册成功后的User对象
 */
public User register(User user) throws SQLException
{
Connection conn=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
try
{
conn=getDataSource().getConnection();

String sql="insert into reg_user(username,password,sex,email,pwd_question,pwd_answer,reg_date) values(?,?,?,?,?,?,?)";
pstmt=conn.prepareStatement(sql);
int index=0;
pstmt.setString(++index, user.getUsername());
pstmt.setString(++index, user.getPassword());
pstmt.setBoolean(++index, user.getSex());
pstmt.setString(++index,user.getEmail());
pstmt.setString(++index, user.getPwdQuestion());
pstmt.setString(++index, user.getPwdAnswer());
pstmt.setTimestamp(++index, new java.sql.Timestamp(user.getRegDate().getTime()));

pstmt.execute();
//读者需注意:在多用户的并发访问中,获取的自增长id值可能不正确。
rs=pstmt.executeQuery("select last_insert_id()");
if(rs.next())
user.setId(rs.getInt(1));
else
{
return null;
}
}
catch (SQLException e)
{
throw e;
}
finally
{
closeResultSet(rs);
closePreparedStatement(pstmt);
closeConnection(conn);
}

return user;
}

/**
 * 关闭ResultSet对象
 * @param rs
 */
private void closeResultSet(ResultSet rs)
{
if(rs!=null)
{
try
{
rs.close();
}
catch (SQLException e)
{
// TODO 自动生成 catch 块
e.printStackTrace();
}
rs=null;
}
}

/**
 * 关闭PreparedStatement对象
 * @param pstmt
 */
private void closePreparedStatement(PreparedStatement pstmt)
{
if(pstmt!=null)
{
try
{
pstmt.close();
}
catch (SQLException e)
{
e.printStackTrace();
}
pstmt=null;
}
}

/**
 * 关闭数据库链接
 * @param conn
 */
private void closeConnection(Connection conn)
{
if(conn!=null)
{
try
{
conn.close();
}
catch (SQLException e)
{
e.printStackTrace();
}
conn=null;
}
}
}3.RegisterAction.javapackage org.hhsh.struts2.action;import java.util.Date;import org.hhsh.struts2.persistence.dao.UserDao;
import org.hhsh.struts2.persistence.entity.User;import com.opensymphony.xwork2.ActionSupport;public class RegisterAction extends ActionSupport
{
private static final long serialVersionUID = 3970199804617664569L;
private User user;
private UserDao userDao;

/**
 * 在构造方法中初始化UserDao对象
 */
/*public RegisterAction()
{
userDao = new UserDao();
}*/

public void setUserDao(UserDao userDao)
{
this.userDao = userDao;
}

/**
 * 请求register!default.action,调用doDefault方法
 */
//@Override
public String doDefault() throws Exception
{
return INPUT;
} /**
 * 调用UserDao的register方法注册用户
 */
//@Override
public String execute() throws Exception
{
user.setRegDate(new Date()); //注意不要忘了设置注册日期
userDao.register(user);
return SUCCESS;
}

/**
 * 为user对象提供getter方法
 * @return
 */
public User getUser()
{
return user;
} /**
 * 为user对象提供setter方法
 * @param user
 */
public void setUser(User user)
{
this.user = user;
}
}

解决方案 »

  1.   

    只在返回的jsp页面上有这句错误提示而已,没有其他的报错,myeclipse控制台上也没有,可以是逻辑出错吧
      

  2.   

    /**
    * 在构造方法中初始化UserDao对象
    */
    /*public RegisterAction()
    {
    userDao = new UserDao();
    }*/你这个构造方法为什么要注释掉啊???注释了对象当然为空啦还有注意下user这个对象,也没有初始化。。
      

  3.   

    qiheia,你发现了这个问题,其实这也是一个问题,我也发现了,改回来,但是后来我发现真正的问题不仅是这里,还有一个问题,但是我已经解决好了,谢谢大家