假如在Struts1 中对用户信息进行修改的操作:流程:
1、点“修改”进入action:request.setAttribute("userDTO", userDTO);
2、传值到页面,页面接收值:<html:text property="userDTO.name" value="${userDTO.name}" />
<html:text property="userDTO.password" value="${userDTO.password}" />
3、点“修改”后,进入Form里先验证: private UserDTO userDTO ; public ActionErrors validate(...,...) {
// 略
} public void reset(..., ...) {
userDTO = new UserDTO ();
} public userDTO getUserDTO () {
return userDTO ;
}
public void setUserDTO (UserDTO userDTO ) {
this.userDTO = userDTO ;
}
当验证条件不满足时,返回到原来JSP页面,但由于此时“${userDTO.name}”的值不存在,原来的文本框当然为空了
此时其真正值在UserDTO对象中,在Form中通过get方法可取到以前一次发贴得到一种办法:<c:if test="${userVO.name == null}">
<html:text property="name" />
</c:if>
<c:if test="${userVO.name != null}">
<html:text property="name" value="${userVO.name}" />
</c:if>
但如果修改的条数有几十条,那太麻烦了,如果必须在Form中验证,有没有简单的办法
1、点“修改”进入action:request.setAttribute("userDTO", userDTO);
2、传值到页面,页面接收值:<html:text property="userDTO.name" value="${userDTO.name}" />
<html:text property="userDTO.password" value="${userDTO.password}" />
3、点“修改”后,进入Form里先验证: private UserDTO userDTO ; public ActionErrors validate(...,...) {
// 略
} public void reset(..., ...) {
userDTO = new UserDTO ();
} public userDTO getUserDTO () {
return userDTO ;
}
public void setUserDTO (UserDTO userDTO ) {
this.userDTO = userDTO ;
}
当验证条件不满足时,返回到原来JSP页面,但由于此时“${userDTO.name}”的值不存在,原来的文本框当然为空了
此时其真正值在UserDTO对象中,在Form中通过get方法可取到以前一次发贴得到一种办法:<c:if test="${userVO.name == null}">
<html:text property="name" />
</c:if>
<c:if test="${userVO.name != null}">
<html:text property="name" value="${userVO.name}" />
</c:if>
但如果修改的条数有几十条,那太麻烦了,如果必须在Form中验证,有没有简单的办法
哎!叫你不用js验证,还往服务器发,占用网络资源不说,还麻烦
这样说吧,当你请求到form去验证的时候,这是的request里面仍然有user对象存在的。你再返回,就又是一个新的request scrop了。
所以你在form里面把user对象取出来再次放到request里面就可以了。就类似在页面设置一个隐藏域做一下参数的中转站一样。