actiion input 属性

struts-config.xml中的对action的input属性的配置的目的就是用于validate失败后返回。
可以查看org.apache.struts.action.RequestProcessor中的源码,在processValidate()方法中有这样一段: 

  1. protected boolean processValidate(ActionMapping mapping,
  2.         ActionForm formInstance, HttpServletRequest request,
  3.         HttpServletResponse response)
  4.         throws IOException, ServletException {
  5.         ……
  6.         ActionErrors errors = formInstance.validate(mapping, request);
  7.         if ((errors == null) || errors.empty()) {
  8.             if (debug >= 1)
  9.                 log("  No errors detected, accepting input");
  10.             return (true);
  11.         }
  12.         ……
  13.         String uri = mapping.getInput();
  14.         ……
  15.         RequestDispatcher rd = getServletContext().getRequestDispatcher(uri);
  16.         ……
  17.         rd.forward(request, response);
  18.         return (false);
  19.     }

mapping是一个ActionMapping对象,在ActionServlet对struts-config.xml进行解析时植入的。mapping.getInput()就返回该mapping对象对应的input属性。

 


*(************关于input属性的另外一个问题*************************************

当前页是动态页面,加了参数才生成的,当前页的表单认证失败后要回到当前页但是INPUT的路径是写在 struts-config.xml里的  怎么给后面加动态的参数?

 

>> .do后面可以加参数,顺便把struts配置里面对应的redirect设置为"true",就可用xx.do?sdasd=sdsad之类。)

<< 参数是变量。。。在form里的validate方法只会到input的路径上啊
>>INPUT是form验证不通过返回的地址  如果这个地址里面有参数 怎么办? 是动态的

<<  我这两天考虑了一下 不知道这样可行否

      首先当前页面是根据那个参数动态生成  把需要显示的内容放到SESSION里

     然后 input就写当前页面的URL  把后面标志当前内容的参数去掉 这样表单验证失败回到当前页面

     由于显示的内容在session里 所有不需要那个参数也就能正常的显示了

     这里还要在Action里做判断 如果有参数 那么针对这个参数从生成DTO 放到session

    里,如果参数为NULL,直接 forward回这个页面,这个request肯定是验证失败INPUT过来的

    这时SESSION已经有存放显示内容的 DTO,故正常显示

   不知道这样可行否 我把我的改改 手里的项目 由于都是这种带参数的 所以表单验证都放到Action里了.

>> 不过你这种做法是不是的选择个适当时机把seesion里的值去掉,,要不session太大了

<< 我感觉你最好不要用SESSION这东西来存这个,这是一种浪费!你最好在用完之后清除掉!这样最保险!

      我也遇到这样的问题,应该有更好的解决办法.

你可能感兴趣的:(apache,xml,struts)