我们来看一看RequestProcessor()的process()方法的部分代码。经过一些基本的处理(如Locale,Role等)之后,会调用processActionForm方法,此方法返回一个ActionForm。然后用processPopulate方法将请求参数传给这个ActionForm,之后进行验证。
// Process any ActionForm bean related to this request
ActionForm form = processActionForm(request, response, mapping);
processPopulate(request, response, form, mapping);
if (!processValidate(request, response, form, mapping)) {
return;
}
if ("request".equals(mapping.getScope())) {
instance = (ActionForm) request.getAttribute(attribute);
} else {
session = request.getSession();
instance = (ActionForm) session.getAttribute(attribute);
}
由于工作需要,我们要做一个通用的Action,它可以处理很多的ActionForm。这有点意思,别人做的是一个ActionForm被好几个Action使用,而我们却恰恰相反。因此我用自定义的RequestProcessor代替的默认的,并重写了它的processActionForm()方法。在处理一个jsp页面时,发现创建ActionForm的时候根本没有调用我的processActionForm()方法,开始我还以为是struts-config.xml文件没有配置好,又在父类的process()(processActionForm方法的调用者)里设了断点,结果也没有停下。
新闻热点
疑难解答