在<exception-mapping>?</exception-mapping>中定义消息密钥

时间:2013-02-25 19:47:24

标签: struts2

我正在尝试找到一种方法,在struts.xml中为Action类抛出的每种类型的异常配置一条错误消息。在一个动作类中,我可以通过捕获异常,调用addActionError(String)并重新抛出异常(假设存在<exception-mapping>)来完成类似的操作。有没有办法通过配置来做到这一点?

作为参考点,Struts1中存在此功能,异常处理程序上具有key属性 - 我希望能够做类似的事情。

<exception key="some.key"
           type="java.io.IOException"
           handler="com.yourcorp.ExceptionHandler"/>

2 个答案:

答案 0 :(得分:0)

在strut2中,您也可以定义异常映射。请参阅http://struts.apache.org/release/2.1.x/docs/exception-configuration.html。你可以有一个常见的error.jsp,它显示一个根据异常的类名查找的消息。

答案 1 :(得分:0)

在Struts2中,您可以使用以下映射将键/消息传递给结果(结果可以是jsp或其他操作类)。

<global-exception-mappings>
 <exception-mapping exception="com.test.exception.MyCustomException"  result="error">
    <param name="param">display.custom.error</param>
 </exception-mapping>
</global-exception-mappings>

<global-results>
    <result name="error" type="chain">handleAction</result>
</global-results>

<action name="handleAction" class="HandleExceptionAction">          
     <result name="result">/WEB-INF/jsp/error.jsp</result>
</action>

如果它是一个动作类,在链接的情况下(如果用户想要处理异常)那么你需要在Action类中有一个带有getter和setter的相应属性。

public class HandleExceptionAction extends ActionSupport implements 
               ServletRequestAware, SessionAware {

private **String param**; 

private HttpServletRequest httpRequest;
private static final Log LOG = LogFactory.getLog(InputAction.class); 

public String execute(){

    LOG.debug("inside excute().....");
    LOG.debug("Parameter passed:" + param);
    System.out.println("Parameter passed:" + param);

    return "result";
}

我正在使用弹簧注射,希望它能帮助你。