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 上下文中声明了一个ViewResolver
。 ViewResolver
实例化一个 View
并且所有实际的响应构建都发生在 View
中。
【讨论】:
以上是关于Spring中的啥类负责解析视图中的消息的主要内容,如果未能解决你的问题,请参考以下文章
List中只有一个元素,用啥类的啥方法可以将这个List转换成某一个对象了?
iPhone 的啥代码,以便用户可以通过单击某些按钮来更改文本视图中的字体大小?
带有 Avro 和 Schema Repo 的 Apache Kafka - 模式 ID 在消息中的啥位置?