Java 在SpringMVC中,我应该如何跨控制器发送resourcebundle消息?
大多数spring教程和示例都向您展示了如何从资源文件中获取消息以及如何在视图jsp中显示消息,但没有说明您应该如何在控制器中以及视图之间处理这些消息 下面是一个我现在是如何做的例子,我有一个视图/控制器来处理忘记的密码。当发送密码时,我会重定向回登录屏幕,并显示一条消息,说明您的密码已发送Java 在SpringMVC中,我应该如何跨控制器发送resourcebundle消息?,java,spring,spring-mvc,resourcebundle,Java,Spring,Spring Mvc,Resourcebundle,大多数spring教程和示例都向您展示了如何从资源文件中获取消息以及如何在视图jsp中显示消息,但没有说明您应该如何在控制器中以及视图之间处理这些消息 下面是一个我现在是如何做的例子,我有一个视图/控制器来处理忘记的密码。当发送密码时,我会重定向回登录屏幕,并显示一条消息,说明您的密码已发送 @RequestMapping(value="/forgottenpassword") public String forgottenpassword(@RequestParam String email)
@RequestMapping(value="/forgottenpassword")
public String forgottenpassword(@RequestParam String email) {
....something something
if(email != null){
return "redirect:/login?forgottenpassword=ok";
}
}
@RequestMapping(value="/login")
public String login(HttpServletRequest request) {
if(request.getParameter("forgottenpassword") != null && request.getParameter("forgottenpassword").equals("ok")) {
data.put("ok_forgottenpassword", "forgottenpassword.ok");
}
return "login";
}
最后,我在视图中显示消息,在本例中是一个freemarker模板
<#if (ok_forgottenpassword?exists)>
<div class="alert alert-success"><@spring.message "${ok_forgottenpassword}" /></div>
</#if>
这是在Spring框架中实现它的最佳方法吗?它很简单,只有一种消息类型,但是如果我需要5种呢?只需创建一个简单的bean并将其推送到数据中。在这个bean中,您可以从resourcebundle中加载您想要的所有消息。顺便问一下:您真的需要资源包吗?它会做一些花哨的把戏,除非你需要i18n,否则这些把戏是完全没有必要的。在几乎所有其他情况下,一个简单的属性文件就足够了。将错误添加到控制器的列表中,如
List<String> errorsList = new ArrayList<String>();
errorsList.add("error.invalid.username");
errorsList.add("error.invalid.password");
errorsList.add("error.invalid.passwordResetLinkSent");
.....
然后在jsp页面中迭代显示所有错误,如下所示
<c:if test="${!empty errorsList}">
<ul>
<c:forEach var="error" items="${errorsList}">
<li><spring:message message="${error}"></spring:message></li>
</c:forEach>
</ul>
</c:if>
这项技术实际上被称为flash message,并在Spring3.1中实现,如下面的答案所示:不幸的是,这不是问题所在