2012-03-24 64 views
0

我是JSP/Servlets/MVC的新手,正在編寫一個顯示關於收件人信息的JSP頁面(使用Servlets和MVC模式),並希望用戶也能夠對其進行「評論」。JSP包含和MVC模式

因此,對於doGet()中的Servlet,它會將所有需要的信息抓取到POJO模型中,並將請求轉發到JSP視圖進行渲染。這工作得很好。

我想「評論」部分是一個單獨的JSP,所以我可以使用RecipeView.jsp將這些視圖分開。所以我已經做到了,但現在有點卡住了。 CommentOnRecipe.jsp中的表單發佈到CommentAction servlet,處理記錄的評論就好了。所以當我重新加載食譜頁面時,我可以看到我剛剛提出的評論。

我想:

  • 刷新頁面作出每個配方在1天的時間內一個以上的評論評論(沒有AJAX現在)
  • 阻止用戶後自動(通過一塊餅乾)。因此,無論何時用戶發表評論,我都會存儲一個表示產品ID的cookie,以便我們稍後檢查該產品ID。它如何在MVC環境中工作?
  • 顯示一條消息,他們已經發表了評論,他們對

我感到困惑使用豆類/包括JSP等就如何實現這一評論時,他們訪問一個 配方用戶。

我知道在ASP.NET的土地,這將是一個UseControl,我會放在一個頁面上,或在ASP.NET MVC,它將是某種PartialView。我只是混淆了它在JSP/Servlets/MVC上下文中的工作方式。

回答

1

你可以使用response.sendRedirect是()或轉發的API中的javax.servlet重定向到一個新的頁面或刷新同一個頁面(重定向到同一頁/路徑,以便豆/數據被刷新)

關於限制每天一條評論 - 是的,你可以使用cookie,但問題是用戶可能會使用另一種瀏覽器類型(鉻,FF,Safari),並將能夠發表多個評論。 理想情況下,您應該將lastCommentTime存儲在模型/持久性存儲中,並將其與用戶信息綁定 - 這樣,您的模型對象可以公開檢查最後評論時間並根據用戶是否可以評論返回true/false的API。 你可以在你的servlet/JSP中使用這個API來顯示/隱藏評論按鈕,並且還會顯示一條消息

+0

謝謝......我想到了Cookie的事情,這是一個很好的觀點。用戶不需要在網站上註冊,它們都是匿名的,所以我不能將特定的食譜/評論與用戶標識綁定。所以,鑑於此,我的Model類(稱爲Recipe)應該公開功能來檢查用戶是否已經對它投了票?我不應該使用Service類來做到這一點?例如。 RecipeService.HasVoted(recipeId)然後檢查cookie是否被設置? – xingyu 2012-03-24 23:30:37

+0

不太可能。所以實體對象(在這種情況下的配方)通常沒有太多的業務邏輯坐在其中。使用實體對象的服務層是放置這種邏輯的好地方。所以實際上你的MVC看起來像:實體/ POJO模型對象 - >服務對象 - > Servlets/viewmodel/viewHelpers-> View/JSP/HTML,這當然是一個很好的MVC架構。因此,RecipeService.userHasVoted(userid)是一個放置它的好地方 - 續... – 2012-03-25 00:01:02

+0

唯一的問題是,由於這種狀態由於您的功能限制而在某種意義上被存儲在視圖中,因此要求服務當你實際上將它存儲在cookie中時:)我不會建議你的服務層檢查cookie。相反,讓servlet檢查cookie並調用服務層上的API來設置狀態(然後使用另一個API來讀取狀態) - 如果支持存儲用戶信息,這將有助於保持服務層的清潔,很容易改變 – 2012-03-25 00:03:18