2010-01-18 46 views
6

我看到我可以添加錯誤並通過<form:errors />標記和addError()方法對BindingResult類進行呈現,但我不知道是否有類似的東西向JSP發送信息消息。用Spring添加郵件

我的意思是,我想在操作成功時添加消息。我知道我可以通過發送一個錯誤來做到這一點,但是如果在沒有任何錯誤的情況下添加錯誤是沒有意義的。

+0

感謝anwersd。正如我所看到的,沒有任何標準數組,因爲它存在於例如Struts中。我已經考慮過你們提出的選擇,儘管我懷疑Spring是否有任何特殊功能可以解決這個問題。 – Javi 2010-01-18 17:25:55

回答

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是具有值「消息」我的一個常數(以便它是後來在foreach循環訪問)。

Message類是一個簡單的POJO與這兩個屬性。我用它的信息消息以及自定義的非驗證錯誤。

這是一個相當自定義的解決方案,但也許我沒有找到內置的解決方案。谷歌在使用這種解決方案之前多一點。

4

爲什麼不只是將消息添加爲傳遞給視圖的模型的屬性。在您的JSP中,您將檢查它們是否爲空,如果不是,則顯示它們。

+1

是的,只是有一個「消息」屬性,你看作爲一個標準。 – cjstehno 2010-01-18 14:56:12

1

在Rails中使用類似Flash的消息。

困難的部分是保留郵件在郵政後重定向。即您提交表單,然後您重定向到另一個頁面,該頁面會顯示一條消息,通知您已成功完成了您的操作。

很明顯,您無法在請求中保留該消息,因爲它在重定向後會丟失。

我的解決方案是保留一個會話範圍的bean,其中包含消息文本及其類型(通知,警告或錯誤)。您第一次在JSP中閱讀它時,必須清除它以避免多次顯示它。