Исключение доступа.класс.имя весной: тег сообщения при использовании SimpleMappingExceptionResolver

в нескольких предыдущих проектах (все до весны 3.0) у меня была одна ошибка обработки JSP-файла (обычно "сообщение.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

есть идеи, что изменилось или как получить доступ к имени класса исключения (часть модели, возвращенной весной на страницу отображенной ошибки)?

1 ответов


реализация EL в Tomcat 7 действительно была изменена, чтобы запретить литералы ключевых слов Java, такие как class, new, static etcetera как свойства EL.

единственное решение, насколько это доступ к ним с помощью скобки обозначения вместо:

${exception['class'].name}

см. также Tomcat выпуск 50147.