使用SimpleMappingExceptionResolver时,访问spring:message标签中的exception.class.name

时间:2011-06-06 21:05:17

标签: spring servlets exception-handling jstl

在以前的几个项目中(所有Spring-3.0之前的版本),我有一个错误处理jsp文件(通常是“message.jsp”),其中有一行类似于以下内容:

<spring:message code="exceptions.${exception.class.name}" text="${exception.message}"/>

这允许我将异常映射到此页面,并通过定义SimpleMappingExceptionResolver的衍生物来解决基于异常类型的某些本地化错误消息:

<bean id="exceptionMapping" class="mycode.ui.resolvers.MyExceptionResolver">
  <property name="exceptionMappings">
    <props>
      <prop key="java.lang.Exception">message</prop>
      <prop key="javax.servlet.ServletException">message</prop>
      <prop key="MyCustomException">message</prop>
      <prop key="ApplicationAuthorizationException">login</prop>
      <prop key="NotLoggedInException">login</prop>
    </props>
  </property>
</bean>

在我尝试升级到Spring 3和Tomcat 7之前,这完美无缺。现在,当我使用此代码时,出现以下错误:

"${exception.class.name}" contains invalid expression(s): javax.el.ELException: The identifier [class] is not a valid Java identifier as required by section 1.19 of the EL specification

知道改变了什么或如何访问异常的类名(Spring返回到映射错误页面的模型的一部分)?

1 个答案:

答案 0 :(得分:18)

Tomcat 7中的EL实现确实已被更改为禁止将classnewstatic等Java关键字文字作为EL属性。

目前唯一的解决方案是使用括号表示法来访问它们:

${exception['class'].name}

另见Tomcat issue 50147