在 项目中使用#springMessage进行错误码解析为错误消息,可是在特定的场景下出现了
$springMacroRequestContext.getMessage($code)
#springMessage 是在org/springframework/web/servlet/view/velocity/spring.vm 文件中定义了一个宏。其内容是:
#** * springMessage * * Macro to translate a message code into a message. *# #macro( springMessage $code )$springMacroRequestContext.getMessage($code)#end
springMacroRequestContext 又是什么呢?
分析Spring 的代码可以发现:
这个是值在AbastractTemplateView中北定义了
public abstract class AbstractTemplateView extends AbstractUrlBasedView { /** * Variable name of the RequestContext instance in the template model, * available to Spring's macros: e.g. for creating BindStatus objects. */ public static final String SPRING_MACRO_REQUEST_CONTEXT_ATTRIBUTE = "springMacroRequestContext";
if (this.exposeSpringMacroHelpers) { if (model.containsKey(SPRING_MACRO_REQUEST_CONTEXT_ATTRIBUTE)) { throw new ServletException( "Cannot expose bind macro helper '" + SPRING_MACRO_REQUEST_CONTEXT_ATTRIBUTE + "' because of an existing model object of the same name"); } // Expose RequestContext instance for Spring macros. model.put(SPRING_MACRO_REQUEST_CONTEXT_ATTRIBUTE, new RequestContext(request, response, getServletContext(), model)); }至此我们可以发现 这个对象就是org.springframework.web.servlet.support.RequestContext 对象。
最终被调用的方法是:
/** * Retrieve the message for the given code, using the "defaultHtmlEscape" setting. * @param code code of the message * @return the message * @throws org.springframework.context.NoSuchMessageException if not found */ public String getMessage(String code) throws NoSuchMessageException { return getMessage(code, null, isDefaultHtmlEscape()); }
可是最终发现页面上显示的是:
$springMacroRequestContext.getMessage($code)
通过这个输出可以发现其原因是该宏未定义。 为什么会是未定义,仔细考虑一下发现原来是在异常的时候传入的code 不是一个String 类型,而是一个枚举类。
相关推荐
### Spring与EJB3.0的关键区别及其优劣分析 #### 一、Spring框架概述 **1.1 引言** Spring作为一个广受欢迎的开源框架,最初被设计用于减轻企业级应用开发中的复杂性问题。它的一个显著特点在于模块化的分层架构...
2. **中文乱码问题**:当客户端发送包含中文字符的数据时,服务器端收到的数据中中文字符被错误地解释为其他编码(如ISO-8859-1),导致界面显示乱码。 3. **配置文件中的异常信息**:题目中的部分内容提到了一些...
第十二章“企业级消息传递”聚焦于Spring Integration与JMS(Java Message Service)和AMQP(Advanced Message Queuing Protocol)等企业级消息传递协议的集成。这些协议提供了可靠的、异步的消息传递机制,对于构建...
FlexServlet则是Spring与Flex之间通信的桥梁,它处理Flex AMF(Action Message Format)请求,将这些请求转发到Spring的业务逻辑层。 最后,`flex-servlet.xml`是Spring的上下文配置文件,专门针对Flex应用。在这里...
源码分析 通过阅读 Spring MVC 的源码,我们可以深入理解其实现原理,例如 DispatcherServlet 如何分发请求,HandlerMapping 如何找到合适的 Controller 方法,以及视图如何被渲染等。 ### 9. 工具支持 开发过程...
在 Spring Boot 中,`FailureAnalyzer` 接口用于在应用程序启动失败时分析异常并生成可读性较高的错误消息。Spring Boot 内置了一些 `FailureAnalyzer` 实现,例如用于分析 ApplicationContext 异常、JSR-303 验证...
### 错误代码分析 #### Apache Tomcat Native Library未找到 首先,日志显示Apache Tomcat Native library未能在java.library.path中找到。这通常意味着在生产环境中优化性能的关键库没有被正确加载。问题可能源于...
- 验证验证码:首先检查用户输入的验证码是否与session中存储的验证码一致,如果不一致,则添加错误信息并返回“message”结果。 - 创建Message对象:如果验证码正确,则创建一个新的`Message`对象,并设置其属性...
SEI提供了丰富的模块来支持各种集成场景,包括但不限于消息通道(Message Channel)、适配器(Adapter)、端点(Endpoint)等。 - **消息通道**:作为消息发送者和接收者之间的连接器,消息通道负责消息的传输。 - ...
2. **RabbitMQ**:RabbitMQ是一个开源的消息代理和队列服务器,它遵循Advanced Message Queuing Protocol (AMQP)标准,用于在分布式系统中解耦和同步组件。RabbitMQ允许应用程序之间通过消息进行通信,提高了系统的...
- **核心类解析**:通过分析 `MessageChannel`、`MessageHandler` 和 `MessageSource` 等核心接口,理解其设计模式和工作原理。 - **适配器实现**:深入研究 FTP、JMS 等适配器的源码,了解如何与外部系统交互。 ...
- 消费者代码(Consumer)通常包含一个实现了`MessageListener`接口的类,这个类会被Spring容器自动初始化,并通过`<jms:listener-container>`配置绑定到特定的Destination。 6. **消息模型** SpringJMS支持两种...
通过上述分析,我们可以看到Spring与JMS结合使用的方式能够极大地简化消息的发送和接收过程。利用Spring提供的工具类和接口,开发者可以更加关注于业务逻辑的实现,而无需过多地关注JMS的具体实现细节。这种方式不仅...
5. **错误处理**:Spring Integration 提供了内置的错误处理机制,如 ErrorChannel 和 ErrorMessage,源码中可以看到这些机制是如何工作的。 6. **Spring Integration 与 Spring Boot 结合**:当 Spring ...
通过分析和学习这个代码,我们可以深入理解Spring WebSocket的工作原理,以及如何在实际项目中有效地使用它。 总结起来,Spring WebSocket测试项目提供了一个学习和实践WebSocket集成的平台,涵盖了从配置、消息...
Spring WebSocket基于事件驱动,通过WebSocketSession接口处理连接的打开、关闭、错误和消息发送事件。这允许开发者灵活地响应各种状态变化。 五、安全集成 Spring Security 可以无缝集成到WebSocket中,提供用户...
通过深入学习和分析Spring 4.1.0的源码,我们可以更有效地利用它来构建高效、灵活的企业级应用。 1. **模块结构** Spring框架由多个模块组成,包括Core Container(核心容器)、Data Access/Integration(数据访问...
通常,博主可能会分享他们如何解决此类问题的经验,包括可能的错误分析、调试步骤,或者使用CXF提供的扩展点进行自定义处理的方法。由于链接无法直接访问,这里只能提供一般性的处理策略: 1. **错误分析**:首先,...
在信息技术领域,Spring AMQP是Spring框架中用于简化AMQP(Advanced Message Queuing Protocol)消息传递的项目,Spring AMQP 2是该项目的版本2。AMQP是应用层协议,用于在客户端和消息传递代理之间进行通信,适用于...
- **表单支持**:Spring Standard Dialect提供了强大的表单处理功能,包括自动填充表单字段、验证错误显示等。 - **属性编辑器和转换服务**:支持使用Spring提供的属性编辑器和转换服务,简化了数据类型之间的转换...