Struts2中ModelDriven的陷阱及其预防

页面表单

<form action="updateInput.action" method="post">
    <input type="text" name="id"/>
    <input type="submit" value="查询">
</form>

struts.xml配置

<action name="updateInput" class="com.test.UserAction" method="updateInput">
    <result name="update_input">user_update.jsp</result>
</action>

com.test.UserAction

public class UserAction implements ModelDriven {
 
    private User user;
 
    @Override
    public Object getModel() {
        if (user == null) {
            user = new User();
        }
        return user;
    }
 
    public String updateInput() {
        //测试ModelDriven陷阱
        // 根据ID,查询数据库,得到User对象
        Object object = ActionContext.getContext().getValueStack().findValue("#root");
        Connection connection = DBConnection.getConnection();
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        User user1 = null;
        try {
            System.out.println("查询用户信息");
            preparedStatement = connection
                    .prepareStatement("select * from t_user where id = ?");
            preparedStatement.setInt(1, user.getId());
            resultSet = preparedStatement.executeQuery();
             
            if (resultSet.next()) {
                user1 = new User();
                user1.setId(resultSet.getInt("id"));
                user1.setUsername(resultSet.getString("username"));
                user1.setPassword(resultSet.getString("password"));
//              user = user1;//这样写有问题
//值栈中的user并没有引用user1,所以在页面上取值实际上并没有取到user1的值。
//将user1的属性copy到user中之后,就可以在页面上取到值了。
                BeanUtils.copyProperties(user, user1);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            DBConnection.close(resultSet, preparedStatement, connection);
        }
        return "update_input";
    }
}

user_update.jsp

<form action="user_update.action" method="post">
        <input type="hidden" name="method:update">
        id:<input type="text" name="id" value="<s:property value="id"/>"> <br/>
        username:<input type="text" name="username" value="<s:property value="username"/>"> <br/>
        password:<input type="text" name="password" value="<s:property value="password"/>"> <br/>
        <input type="submit" name="submit" value="更新用户">
</form>


posted @ 2014-08-10 21:05  商商-77  阅读(230)  评论(0编辑  收藏  举报