日期:2014-05-20  浏览次数:20687 次

问个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;
  }


这两个方式都不是很好,肯定有更好的方式,但是一时半刻还真没办法,我希望达到 这样一个效果,无论异常在那里抛出都能实现国际化。



------解决方案--------------------
sf
------解决方案--------------------
楼主是强人,我帮顶吧。
------解决方案--------------------


确实不方便



每个公司都有自己的一套处理机制
------解决方案--------------------
我坚持struts1不放松。
------解决方案--------------------
我想LZ 是会自己写个拦截器的吧, 那还是写一个吧
看看http://darkranger.javaeye.com/ 他的BLOG 上有拦截器的,是不是有好的拦截器设置啊??
------解决方案--------------------
搞不清楚,帮顶
------解决方案--------------------
值得研究。。。。

------解决方案--------------------
帮顶!!!!
------解决方案--------------------
学习
------解决方案--------------------
在s2里面建议使用拦截器来处理吧,不过如果当前异常不需要在前台明细显示或者做重定向页面提示,一般情况下直接try {} catch{}掉就行,毕竟异常的处理机制还是需要谨慎,处理不好,麻烦很多
------解决方案--------------------
发不了贴,在此问个问题,希望各位解答,谢谢

我用struts2 做添加消息功能 出现问题:
<form id="inputForm" action="${ctx}/message/message!save.action" method="post">
<input type="hidden" name="id" value="${message.id}" />
<table class="inputView">

<tr>
<td width="85">消息标题:</td>
<td width="381"><input type="text" name="title" size="40"
value="${message.title}" /><span class="STYLE1">*</span></td>
</tr>
<tr>
<td>&nbsp;&nbsp;作&nbsp;&nbsp;&nbsp; 者:</td>
<td><input type="text" name="loginName" size="40"
value="${user.loginName}" /><span class="STYLE1">*</span></td>
</tr>
<tr>
<td>消息类别:</td>
<td><span id="postTypeDiv"> <select name="ptid" id="ptid">