Spring中的啥类负责解析视图中的消息

Posted

技术标签:

【中文标题】Spring中的啥类负责解析视图中的消息【英文标题】:What class in Spring is responsible for resolving messages in a viewSpring中的什么类负责解析视图中的消息 【发布时间】:2014-07-14 15:05:12 【问题描述】:

我正在编写一个 spring mvc 应用程序,每个客户端都有一个自定义消息(标签)的用例。每个请求在路径中都有一个唯一的键,例如:

http://somehost/something/A1B2C3D4/page
http://somehost/something/H7CD8E31/page

我将从数据库加载自定义消息。

我在这里找到了一篇文章,它为整个应用程序使用了自定义数据库消息: Custom Database messages

我稍微修改了这种方法并使用以下代码读取请求:

    private String getIdFromRequest() 

    ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
    HttpServletRequest req = attr.getRequest();

    String id=null;
    try 
        id = ((String) req.getServletPath()).split("/")[1];
     catch(Exception e) 
        System.out.println("Request did not have key");
    

    return id;

然后我在扩展 ReloadableResourceBundleMessageSource 的类的 resolveCode 中调用此消息。

如果一个页面有 20 条消息,则此代码块每页运行 20 次。我的问题是 spring 在哪里或如何从视图模板中读取消息?渲染视图时,它将视图解析为文件,然后它必须遍历每个调用 resolveCode 的消息。我想通过扩展发生循环的类,每页调用一次我的getIdFromRequest 方法。我正在查看 spring 源代码,但找不到我要查找的内容。

谁能指出我正确的方向?此外,如果有更好的方法来解决我的问题,我也将不胜感激。

【问题讨论】:

【参考方案1】:

你没有在你的问题中提到百里香,但因为它在标签中,我假设你正在使用它。

如果是这样的话,因为 thymeleaf 是一个模板库,所以一切都是在视图渲染时完成的。我认为相关课程不是春季课程,而是百里香课程。

我建议您查看org.thymeleaf.spring3.view,这是您在应用程序中使用的视图。如果你想使用一个专门的子类,你应该首先从同一个包中继承ViewResolver

如果你不使用 thymeleaf,一般的工作流程是一样的:你在 spring 上下文中声明了一个ViewResolverViewResolver 实例化一个 View 并且所有实际的响应构建都发生在 View 中。

【讨论】:

以上是关于Spring中的啥类负责解析视图中的消息的主要内容,如果未能解决你的问题,请参考以下文章

List中只有一个元素,用啥类的啥方法可以将这个List转换成某一个对象了?

iPhone 的啥代码,以便用户可以通过单击某些按钮来更改文本视图中的字体大小?

带有 Avro 和 Schema Repo 的 Apache Kafka - 模式 ID 在消息中的啥位置?

我应该将我的 XML bean 放在 Spring Boot 应用程序中的啥位置?

spring mvc中的多个视图解析器

tcpip协议中的ip相当于osi中的啥层