在一个很大的jsp中有比较多的select标签,需要用request中的list来填充它。在用struts框架校验的时候,校验不通过则返回此页面。问题来了:校验不通过的时候,是不会进入到相应的action的,那么页面上的select标签就无法恢复到用户操作前的值(下拉框中的值都没有了),根本就不会有list了。当然,有些比较变态的方法是可以做好的,比如在form中重载validate方法得到异常对象,然后返回null,然后在进入action,在其中判断error对象是否为空,这样就可以手动加入list。。这样感觉很别扭。。大家给一些好的处理方案,因为struts用的不多,还请大家高抬贵手! 谢谢了

解决方案 »

  1.   

    struts校验有很多种方法。
    1. 在formbean 中用validate,当然要配置一下struts-config.xml:<action>validate=true
    2. 在Action中进行处理。自己写check 共通方法,再调用。
    3. 配置validate.xml中的动态校验。通常一个相对成熟的项目采用的是2或3的处理方案。
    因为提交formbean 中的内容并没有丢失,struts框架会自动将值保留在页面上。相关的资料请自己查阅一下。我说的不正确的地方,请大家指正。
      

  2.   

    在actionForm里面做验证不是很好吗
      

  3.   

    其实是这样的,验证后直接返回页面,那么页面上的list无法通过action中的处理得到,form中的值虽然还在,但是select标签却无法回显数据(因为没有list了)。今天早上起来突然想到了一个比较好的方法:在配置文件中的input属性配置.do的url,让验证不通过时进入自己的action后再返回,这个还是比较好的。其实是我太笨了,struts用的不多的情况,呵呵。等大家多发表一些意见结贴。
      

  4.   

    我使用的是Struts标签,如果在Action中出错再返回时,输入的数据还是会自动保存着的,用普通的html标签的话就会被清除掉
      

  5.   


    input配置.do也是个不错的办法,但是这个url如果是带参数的会不会有些麻烦呢?
    你可以试试,在formBean中仍然有validate,但不是自动调用,进入action后由某个方法手动来调用,看看有没有错误,然后再决定返回的页面。不过这样写可能会多点代码吧。其实有些东西能在前台做了也好,前台的提示也是比较友好的。像你这么多的下拉框,若要初始化这个页面,也得向数据库里面取不少数据。最好是前台和后台都有,大部分情况下前台解决,实在有部分顽固分子,后台做保障。
      

  6.   

    struts 确实很好用,但是验证这个东西,一般用js做就OK了,那样还担心,提交不成功,提交数据消失吗,
    建议用js写验证,,,
      

  7.   

    你想要初始值还不容易,你把你选择的这个值在ACTION里面使用request.setAttribute()放到一个参数里面,然后验证不通过的时候在页面的该下拉框把这个值作为默认值就好了啊