我正在为每个客户编写一个带有自定义消息(标签)用例的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源代码,但我找不到我要找的东西。
有人能指出我正确的方向吗?此外,如果有更好的方法来解决我的问题,我也会对此表示赞赏。
答案 0 :(得分:0)
你没有在你的问题中谈到百里香,但正如标签中的那样,我假设你正在使用它。
如果是这种情况,由于百日咳是一个模板库,所有都是在视图渲染时完成的。我认为相关的班级不是春季班级,而是百里香班级。
我建议您查看org.thymeleaf.spring3.view
,这是您在应用程序中使用的视图。如果你想使用一个专门的子类,你应该首先从同一个包中继承ViewResolver
。
如果您不使用百里香,一般工作流程是相同的:您在春季上下文中声明了ViewResolver
。 ViewResolver
View
实例化View
,所有实际的响应构建都在{{1}}。