大多数spring教程和示例向您展示了如何从资源文件中获取消息以及如何在视图中显示消息(jsp),而不是如何在控制器和视图之间处理这些消息。
以下是我现在如何使用处理忘记密码的视图/控制器的示例。密码发送后,我会重定向回登录界面,并显示“您的密码已发送...”
@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";
}
最后,我在我的视图中显示消息,在这种情况下是一个自由标记模板
<#if (ok_forgottenpassword?exists)>
<div class="alert alert-success"><@spring.message "${ok_forgottenpassword}" /></div>
</#if>
这是在Spring框架中执行此操作的最佳方式吗?只有一种类型的消息很简单,但如果我需要5?
答案 0 :(得分:0)
只需创建一个简单的bean并将其推送到数据。在那个bean中,你可以拥有你想要从resourcebundle加载的所有消息。 (顺便说一下:你真的需要资源包吗?它做了一些花哨的技巧,除非你需要i18n,否则完全没有必要。一个简单的属性文件就足以满足其他所有情况。)
答案 1 :(得分:0)
将错误添加到控制器的列表中,如
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>
答案 2 :(得分:0)
这种技术实际上称为flash消息,并在Spring 3.1中实现,如本答案中所示:https://stackoverflow.com/a/7808960/142824