用Spring添加消息

时间:2010-01-18 11:44:57

标签: java spring spring-mvc

我已经看到我可以通过<form:errors />类的addError()标记和BindingResult方法添加错误并进行渲染,但我想知道是否有类似的信息要发送给JSP。

我的意思是,我想在操作成功时添加消息。我知道我可以通过发送错误来做到这一点,但是在没有任何错误的情况下添加错误对我没有任何意义。

3 个答案:

答案 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中读取它时,必须清除它以避免多次显示它。