struts-config.xml中的对action的input属性的配置的目的就是用于validate失败后返回。
可以查看org.apache.struts.action.RequestProcessor中的源码,在processValidate()方法中有这样一段:
- protected boolean processValidate(ActionMapping mapping,
- ActionForm formInstance, HttpServletRequest request,
- HttpServletResponse response)
- throws IOException, ServletException {
- ……
- ActionErrors errors = formInstance.validate(mapping, request);
- if ((errors == null) || errors.empty()) {
- if (debug >= 1)
- log(" No errors detected, accepting input");
- return (true);
- }
- ……
- String uri = mapping.getInput();
- ……
- RequestDispatcher rd = getServletContext().getRequestDispatcher(uri);
- ……
- rd.forward(request, response);
- return (false);
- }
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这东西来存这个,这是一种浪费!你最好在用完之后清除掉!这样最保险!
我也遇到这样的问题,应该有更好的解决办法.