需求:
    我的每个jsp页面都是通过Action进入的,这样可以通过Action的editUI方法在request中存放一些数据,在jsp页面展示;
    我希望使用struts2的校验框架在编辑页面提交出错后能显示出错信息,且返回至编辑页面时也必须先经过Action    <action name="editUI" type="EditAction" method="editUI">
       <result name="editUI">/WEB-INF/pages/edit.jsp</result>
       <result name="input">/WEB-INF/pages/other.jsp</result>
    <action>    <action name="edit" type="EditAction" method="edit">
       <result name="input" type="chain">editUI</result>
    <action>    这样的配置后提交至edit这个action时,如果出错了,它会进入editUI这个Action的input视图,而不是执行EditAction的editUI方法;
  
    这个问题的根本在于如何配置edit这个action的input视图,让它先经过editUI这个Action,即执行EditAction的editUI方法,再经过jsp页面;网上已经有很多人碰到这样的问题,但是都没有答案,希望各位大侠帮忙解决,多谢!

解决方案 »

  1.   

    只要你在EditAction中有editUI方法,应该是可以执行到这个方法中的
      

  2.   

    你要显示错误消息很简单啊 
    errormessage添加错误消息
    <s:error/>显示错误消息
      

  3.   

    真晕,题目都看不懂。“先经过editUI这个Action,即执行EditAction的editUI方法,再经过jsp页面;” 
      

  4.   

    可以Struts2 Dispatcher试试。
      

  5.   

    问题:校验框架在编辑页面提交出错后能显示出错信息,且返回至编辑页面时也必须先经过Action 
    楼主你把问题复杂化了,你把在出错的时候,你把用户的数据放在出错页面的请求中,在由出错页面通过请求Action顺便把数据带回到编辑页面就可以了。
    总体想法是,你只要把用户的数据在带在请求中,按正常跳转执行就可以了。
      

  6.   

    问题是出错页面只能直接进入jsp页面,无法进入Action后进入jsp页面
      

  7.   

    把editUI的result name 为input的换掉,换成其他名字
      

  8.   

    把editUI的result name 为input的换掉,换成其他名字
      

  9.   

    那样会报错的,提示没有input
      

  10.   

    看到 LS 的留言我挺郁闷的, 越帮越忙 ...<action name="editUI" type="EditAction" method="editUI">
      <result name="editUI">/WEB-INF/pages/edit.jsp </result>
      <result name="input">/WEB-INF/pages/other.jsp </result>
    <action>跟你这样讲吧. 把你想到 other.jsp 显示的数据放在 validateEditUI() 方法中去查询对 struts 2 的流程熟悉一点吧. 拜托! LS 的各位...像上面的 editUI 请求,其执行顺序是:  validateEditUI --> validate (此方法执行完后检查 filederror 或 actionerror 中是否有值,有则直接回到 input 视图不再向下执行)--> editUI --> execute敬告 LZ ,要养成写 validate 方法的习惯. 哪怕什么校验都不做,写个空方法都行父类 actionsupport 的 validate 和 execute 不要重写,把配置文件中定义的 method 都写上
    如上例中的 editUI 和 validateEditUI还有,遇到问题自己多想想. 拿到 csdn 上来问,还不如自己想到的方法更透彻
      

  11.   

    我在此链接中也回答过相同问题: 
    http://topic.csdn.net/u/20090908/15/32830894-e841-4353-9ef3-b021b69bf120.htmlLZ 可以自己想想这个流程嘛:用 chain 传递过来的值, 在后面的 请求中执行完 validate 后,fielderror 被取到
    此时不再执行 editUI 而直接跳到 input 视图.所以,把值放在什么地方查询,成了关键...
    这些天看到一些用 struts2 的人,任意时间任意空间都 带着 struts1 的思维方式就头疼csdn 确实让人挺失望的...
      

  12.   

    是啊struts1和struts2好多人都没搞清,struts2不是struts1的升级...
      

  13.   

     <result name="input">/WEB-INF/pages/other.jsp </result> 你把这个other.jsp界面换为你的编辑界面,显示错误信息
      

  14.   

    说白了,就是validate后如果有fieldError或actionError,它就会转向input,并且type为dispather。
    我错了。
      

  15.   

    正是我需要的,只是听说chain不提倡用,会引起参数混乱,有没有更优美的方法呢
      

  16.   

    其实按你的方式也可以不把查询写在validateXxx里啊,因为在execute()方法中也可以根据一个ifelse判断直接手动返回success或input的,在返回之前做查询效果是一样的吧?只是一个编程规范而已。而且这个查询应该是上个action做的事,这样难道是又把上个action的代码复制过来?
    另外还有个问题,如果这个查询是带参数的,而这个参数是执行上个action用到的,那该怎么处理?
    我的解决方式是:把这个参数一直写在表单的<hidden:>里。一个页面一个页面的往下传。有点傻的办法。你说的方法我没太看懂,麻烦说得再详细点。有关键代码最好。