Java Struts2 IllegalArgumentException异常处理?
我有一个无状态会话Bean:Java Struts2 IllegalArgumentException异常处理?,java,jsp,exception-handling,struts2,illegalargumentexception,Java,Jsp,Exception Handling,Struts2,Illegalargumentexception,我有一个无状态会话Bean: public CmcMapServerInfo getMapServerDetails() throws IllegalArgumentException, PersistenceException{ Query query; List<CmcMapServerInfo> resultList; CmcMapServerInfo mapServer = null; try{
public CmcMapServerInfo getMapServerDetails() throws IllegalArgumentException, PersistenceException{
Query query;
List<CmcMapServerInfo> resultList;
CmcMapServerInfo mapServer = null;
try{
query = em.createNamedQuery("CmcMapServerInfo.getMapServerr");
resultList = query.getResultList();
mapServer = resultList.get(0); // as only single row is there
}catch(IllegalArgumentException e){
System.out.println(" ILLEGAL CATCHED------------------------------------------------------------");
throw e;
}catch(PersistenceException e){
System.out.println(" PERSISTENCE CATCHED------------------------------------------------------------");
throw e;
}
return mapServer;
}
这里的问题是操作类中的没有捕获来自bean的rethrown异常,因此struts2异常拦截器处理它
我已在struts.xml中配置了struts2异常处理:
<package name="cdot.oss.cmsat.conf.mapserver.struts" namespace="/"
extends="struts-default">
<interceptors>
<interceptor-stack name="appDefaultStack">
<interceptor-ref name="defaultStack">
<param name="exception.logEnabled">true</param>
<param name="exception.logLevel">ERROR</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="appDefaultStack" />
<global-results>
<result name="exception">mapServer/pages/Exception.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping exception="java.lang.Exception"
result="exception" />
</global-exception-mappings>
<action name="getMapServerDetails"
class="cdot.oss.cmsat.conf.struts.ConfigureMapServerAction" method="getMapServerDetails">
<result name="success">mapServer/pages/ConfigureMapServerInput.jsp
</result>
<result name="input">mapServer/pages/ConfigureMapServerInput.jsp
</result>
<result name="error">mapServer/pages/Error.jsp</result>
</action>
符合事实的
错误
mapServer/pages/Exception.jsp
mapServer/pages/ConfigureMapServerInput.jsp
mapServer/pages/ConfigureMapServerInput.jsp
mapServer/pages/Error.jsp
由于在Action类中未捕获异常,因此异常
的全局异常映射
将处理异常并显示异常.jsp
为什么在Action类中没有捕获到异常,即使它在Bean中捕获并在那里重新捕获?如果在尝试结束时捕获Throwable,异常是否会出现在那里?@ThrashBean:Throwable在Action类或Bean中?@ThrashBean:如果我在Action类中最后编写Throwable块,它会到达Throwable内部。我在里面做了一个测试throwable@Siddhartha,这只是为了知道是否将异常引发到action类,仅此而已。很可能IllegalArgumentException被包装在其他类型的异常中。请这样做-捕获可丢弃的,并在块内检查原因。通过system.out上的断点,调试必须很容易。您应该知道异常是如何包装的。@ThrashBean:CAUSE------------java.lang.IllegalArgumentException:NamedName的查询:CmcMapServerInfo.getMapServerr未找到。
<package name="cdot.oss.cmsat.conf.mapserver.struts" namespace="/"
extends="struts-default">
<interceptors>
<interceptor-stack name="appDefaultStack">
<interceptor-ref name="defaultStack">
<param name="exception.logEnabled">true</param>
<param name="exception.logLevel">ERROR</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="appDefaultStack" />
<global-results>
<result name="exception">mapServer/pages/Exception.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping exception="java.lang.Exception"
result="exception" />
</global-exception-mappings>
<action name="getMapServerDetails"
class="cdot.oss.cmsat.conf.struts.ConfigureMapServerAction" method="getMapServerDetails">
<result name="success">mapServer/pages/ConfigureMapServerInput.jsp
</result>
<result name="input">mapServer/pages/ConfigureMapServerInput.jsp
</result>
<result name="error">mapServer/pages/Error.jsp</result>
</action>