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

时间:2014-07-14 15:05:12

标签: java spring view thymeleaf

我正在为每个客户编写一个带有自定义消息(标签)用例的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;
}

然后我在我的班级的resolveCode内调用此邮件,该邮件扩展为ReloadableResourceBundleMessageSource

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

有人能指出我正确的方向吗?此外,如果有更好的方法来解决我的问题,我也会对此表示赞赏。

1 个答案:

答案 0 :(得分:0)

你没有在你的问题中谈到百里香,但正如标签中的那样,我假设你正在使用它。

如果是这种情况,由于百日咳是一个模板库,所有都是在视图渲染时完成的。我认为相关的班级不是春季班级,而是百里香班级。

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

如果您不使用百里香,一般工作流程是相同的:您在春季上下文中声明了ViewResolverViewResolver View实例化View,所有实际的响应构建都在{{1}}。