问个struts2异常处理问题!
用了struts2异常处理后发现。处理国际化反倒不是很容易.
比如struts1定义一个异常,那里抛出都能定位到显示界面。而且能够使用资源的key值。
到struts2反倒实现异常国际化比较难,也可能我不知道好方法。
目前一共看了两个方案,都不是很好。
第一个就是异常在action中抛出,那么就可以用getText()方法了。但是这个太受限了,很多异常不需要在action中使用。但是要抛出。
throw new MyException(getText(资源key值,参数));---但是getText方法只能在action中用或是页面,而不能在DAO层直接使用。
第二个就是自己写拦截器,拦截自己定义的异常,只要是项目定义的异常就抛出。方式固然好,但是麻烦。
public class ProExceptionInterceptor extends AbstractInterceptor {
public String intercept(ActionInvocation invocation) throws Exception {
String result = null;
try {
result = invocation.invoke();
} catch (项目自定义的那个根异常 exception) {
ActionSupport as = (ActionSupport)invocation.getAction();
将异常压入action,这个过程还是用getText方法。
如果是链式异常
List exceptions = exception.getExceptions();
if (exceptions != null && !exceptions.isEmpty()) {
for (int i = 0; i < exceptions.size(); i++) {
项目自定义的那个根异常 subEX = (项目自定义的那个根异常) exceptions.get(i);
将异常压入action;
}
}
throw exception;
}
return result;
}
这两个方式都不是很好,肯定有更好的方式,但是一时半刻还真没办法,我希望达到 这样一个效果,无论异常在那里抛出都能实现国际化。