假如在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.   

    。似乎是request失效
    哎!叫你不用js验证,还往服务器发,占用网络资源不说,还麻烦
      

  2.   

    rquest本来的有效期就是一次请求,再回来,EL 表达式当然取不到值。<html:text property="userDTO.name" value="${userDTO.name}" /> 你这样赋值的同时,值本来就会保存到Struts Form里面,这是常识,即使你不去Action里面验证。Form里面也是有值的。
      

  3.   

    用JS验证,老弹出对话框出来,感觉蛮烦用Form验证,只是在页面相对应的地方提示一些信息,感觉友好一些
      

  4.   

    囧。js验证是需要的,但是服务器端验证同时也需要,要知道,浏览器一设定,js就全部失效的。
      

  5.   

    前后台都要挡的。
    这样说吧,当你请求到form去验证的时候,这是的request里面仍然有user对象存在的。你再返回,就又是一个新的request scrop了。
    所以你在form里面把user对象取出来再次放到request里面就可以了。就类似在页面设置一个隐藏域做一下参数的中转站一样。