我已经看到我可以通过<form:errors />
类的addError()
标记和BindingResult
方法添加错误并进行渲染,但我想知道是否有类似的信息要发送给JSP。
我的意思是,我想在操作成功时添加消息。我知道我可以通过发送错误来做到这一点,但是在没有任何错误的情况下添加错误对我没有任何意义。
答案 0 :(得分:4)
为什么不将消息添加为传递给视图的模型的属性。在JSP中,您将检查它们是否为空,如果不是,则显示它们。
答案 1 :(得分:2)
有趣。我在我的一个旧项目中找到了这个。:
(这是一个基本控制器,但很可能是一种实用方法)
protected void addMessage(String key, boolean isError,
HttpServletRequest request, Object... args) {
List<Message> msgs = (List<Message>) request.getAttribute(MESSAGES_KEY);
if (msgs == null) {
msgs = new LinkedList<Message>();
}
Message msg = new Message();
msg.setMessage(msg(key, args));
msg.setError(isError);
msgs.add(msg);
request.setAttribute(MESSAGES_KEY, msgs);
}
然后在我所拥有的所有页面中包含的messages.jsp
中:
<c:forEach items="${messages}" var="message">
//display messages here
</c:forEach>
MESSAGES_KEY
是我的常量,带有值“messages”(以便以后可以在forEach循环中访问)。
Message
类是具有这两个属性的简单POJO。我将它用于信息消息以及自定义非验证错误。
这是一个相当自定义的解决方案,但也许我还没有找到内置的解决方案。谷歌在使用这样的解决方案之前要多一点。
答案 2 :(得分:1)
在Rails中使用类似Flash消息的内容。
困难的部分是在邮件后将邮件保留在重定向中。即您提交表单并重定向到另一个页面,该页面会显示一条消息,通知您已成功完成操作。
很明显,您无法将邮件保留在请求中,因为重定向后邮件会丢失。
我的解决方案是保留一个包含消息文本及其类型(通知,警告或错误)的会话范围bean 。第一次在JSP中读取它时,必须清除它以避免多次显示它。