2012-03-29 56 views
0

我正在用簡單的Servlet和MVC模式構建應用程序。我沒有使用像Spring這樣的框架。在Servlets/MVC中查看模型

我有一些模型類是這樣的:

public class BlogPost { 

private List<Comment> _comments; 

// Things 
} 

public class Comment { 
// Code 
} 

帖子可以與他們收集相關的零個或更多的評論。

不過,我想它被傳遞給視圖前,也就是我在設置cookie的值一旦用戶對一個博客帖子評論到一些額外的信息附加到博客帖子模型。嚴格地說,這不是BlogPost模型本身的一部分 - 它是無關的,偶然的信息,但是我不確定我是否應該讓自己變得容易,只是將它添加到BlogPost類中或者做一些事情來抽象出來多一點。

所以,應該我一個字段添加到博客帖子類來處理這個附加價值,或者我應該做一個「視圖模型」沿着被傳遞到JSP鑑於此行:

public class BlogPostView { 

public BlogPostView(BlogPost bp, String message) { 
    // Constructor stuff, save these to instance variables 
} 

public BlogPost getBlogPost() { /* ... */ } 
public String getMessage() { /* ... */ } 

} 

回答

0

創建一個HashMap模型 - 並將其與響應一起傳遞給view。 model.put(「博客」,博客) model.put(「信息」,「一些信息」)

1

如果博客帖子和您的Cookie數據是不相關的,這是一個壞主意把cookie數據在BlogPost類。 BlogPost類應該代表它被稱爲 - 博客文章。將其他數據關聯起來會令人困惑。

你專門創建一個類來傳遞給視圖的第二個選項是一個更好的主意,不過我很好奇,想知道爲什麼你需要通過博客文章和cookie數據作爲一個對象,以你的觀點?如果您使用原始的servlet:

request.setAttribute("blogPost",blogPost); 
request.setAttribute("cookieData",cookieData); 

使用模型類(如Spring MVC的ModelMap):

model.addAttribute("blogPost",blogPost); 
model.addAttribute("cookieData",cookieData); 

您的觀點將有機會獲得數據的兩件,你可以操縱使用JSTL或其他標籤庫。

如果有什麼我失蹤,你能否詳細說明嗎?

+0

此外,在冠冕堂皇的肛門的風險......不以下劃線前綴的實例變量 - 這不是正確的Java命名約定。 :) – 2012-03-29 22:18:38

+0

感謝您的回覆,我也不知道有關命名約定的事情。我會看一些Java風格指南,以獲得相關建議。 – xingyu 2012-03-30 03:30:19