我們來看一看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方法的調用者)里設了斷點,結果也沒有停下。
新聞熱點
疑難解答