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>


你可能感兴趣的:(return,public)