在項目中調用一個action的方法的時候發生了一個錯誤,但是在catalina.out和配置的log4j都沒有打印異常,後來在執行的action中加了logger.error("XXXXX"),也沒有打印異常。
後來發現是struts2默認的有異常攔截器ExceptionMappingInterceptor,但是是禁用的,需要自己啓用
<interceptor-ref name="defaultStack"> <param name="exception.logEnabled">true</param> <param name="exception.logLevel">ERROR</param> </interceptor-ref>
自定義全局異常處理的顯示的頁面
<global-results> <result name="error">/public/error.jsp</result> </global-results> <global-exception-mappings> <exception-mapping result="error" exception="java.lang.Exception"></exception-mapping> </global-exception-mappings>
在顯示的頁面/public/error.jsp也可以顯示發生的異常信息
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@taglib uri="/struts-tags" prefix="s"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <div class="msgFalse" > <dl> <dt>操作失敗</dt> </dl> <s:property value="exception"/> <s:property value="exceptionStack"/> </div> </body> </html>
異常:No result defined for action XXXAction and result input
1.在action裏面定義了某類型的變量,然後想通過struts的自動填裝把post來的表單的數據轉換,如果轉換類型失敗就出現此種錯誤
2.頁面提交了同一個名字的參數多個
比如“”
username 123
username 123
permissions 123
info 31234
頁面提交了了兩個username ,而我的後臺卻只寫了一個String username,這樣同樣會出錯.
3.頁面中用到的控件名稱與後臺Action中的屬性名稱不一致
這個很好理解,名稱不匹配,Struts2是不會給Action中的屬性賦值的