spring - 在Spring :message tag when using SimpleMappingExceptionResolver中访问exception.class.name

标签 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返回到映射的错误页面的模型的一部分)吗?

最佳答案

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

到目前为止,唯一的解决方案是使用大括号表示法访问它们:

${exception['class'].name}

另请参见Tomcat issue 50147

关于spring - 在Spring :message tag when using SimpleMappingExceptionResolver中访问exception.class.name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6258025/

相关文章:

java - Spring批量写入基于订单对象的多个表

java - 为什么需要严格执行 Spring MVC 服务层中的类接口(interface)?

servlets - 使用 RequestDispatcher 将数据从 servlet 传递到另一个 servlet

java - 使用 html 表单时 servlet 404 发现错误

ruby - 如何捕获 ruby​​ 中的所有异常?

java - 如何从添加到 Controller 内的modelAndView中的arraylist将对象获取到jsp中

java - Spring Security Oauth2——多用户认证服务

servlets - getParameter 在 servlet 中返回 null

python - 在 Python 中,如何将警告视为异常?

java - JAVA 中未处理的异常类型