2011-12-01 117 views
0

我想實現以下結構:servlet請求和驗證

 
Servlet (GET) (put collection of X on request) 
    | 
JSP (output list of X) <-- 
    |      | 
Servlet (POST) ----------- Validation error! 
    | 
Validated OK, continue                            

我使用How to avoid Java code in JSP files?描述的模式來實現這一點,但我想知道是否有避免重新加載一個簡單的方法我的X在驗證階段的集合,因爲它不再位於請求對象上。我在POST階段在請求範圍中添加了一些驗證消息,因此我需要能夠訪問這些消息。

我試圖避免在這個階段的框架,因爲該項目的規模似乎並不合理。

+0

坦白得到X的收集,使用框架是合理的,只要它不是「Hello world!」應用。 – bezmax

+0

爲什麼您需要在驗證階段重新加載它? – BalusC

回答

4

是的。最簡單的方法是將X的集合放入會話中。

鑑於HttpServletRequest,您可以通過getSession()獲得其關聯的HttpSession。然後,通過setAttribute()設置X收集到HttpSession,那就是:

httpRequest.getSession().setAttribute("xxxxxxx" , collectionOfX) 

然後,在Servlet(POST),可以從HttpSession通過

httpRequest.getSession().getAttribute("xxxxxxx"); 
+2

(好的做法是一旦你不再需要這個對象,就從對話中刪除對象,這樣你就不會浪費內存) – Fouteier

+1

如果在所有瀏覽器標籤/窗口之間共享數據並不是問題,並且它們都會影響到它,那麼它可以放在會話中。但在這種特殊情況下,它似乎是應按每個請求編輯的數據。然後我不會把它放在會話中。 – BalusC

+0

儘管在這種情況下我可以將它放在會話中,但我可以預見BalusC的觀點是有效的(即它是一個特定於請求的屬性)的情況。在這種情況下,我假設我別無選擇,只能在「POST」中重新加載它,以便它可用於JSP中的EL標記。 –