2012-03-29 2 views
0

Я создаю приложение с простыми сервлетами и шаблоном MVC. Я не использую никаких фреймворков, таких как Spring.Модели в сервлетах/MVC

У меня есть несколько классов модели, как это:

public class BlogPost { 

private List<Comment> _comments; 

// Things 
} 

и

public class Comment { 
// Code 
} 

сообщений может иметь ноль или более комментариев, связанных с ними в этой коллекции.

Однако я хочу добавить некоторую дополнительную информацию в модель BlogPost до того, как она будет передана в представление, а именно значение, которое я установил в Cookie, как только пользователь сделает комментарий к BlogPost. Строго говоря, это не является частью самой модели BlogPost - это несвязанная, случайная информация, однако я не уверен, что я должен облегчить себе и просто добавить ее в класс BlogPost или сделать что-то, чтобы абстрагировать это еще немного.

Итак, я должен добавить поле в класс BlogPost, чтобы справиться с этой дополнительной стоимости, или я должен сделать «View Model» вдоль линий этого, который пропускается в представлении 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 и передайте ее вместе с ответом на просмотр. model.put («блог», блог) model.put («сообщение», «некоторые сообщения»)

1

Если BlogPost и ваши данные куки не имеют никакого отношения, это плохая идея, чтобы поместить данные куки в вашем Класс BlogPost. Класс BlogPost должен представлять то, что он назвал - сообщение в блоге. Было бы странно иметь другие связанные данные.

Ваш второй вариант создания класса, специально предназначенный для перехода к представлению, является лучшей идеей, хотя мне любопытно узнать, почему вам нужно передать сообщение в блоге и данные cookie как один объект для вашего представления? Если вы используете сырые сервлетов:

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

с использованием модели класса (например, Spring MVC ModelMap):

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

Ваше мнение будет иметь доступ к обеим частям данных, которые вы можете манипулировать с помощью JSTL или других библиотек тегов.

Если что-то мне не хватает, можете ли вы подробнее разобраться?

+0

Кроме того, с риском озвучивания анального ... не префиксные переменные экземпляра с подчеркиванием - это неправильное соглашение об именах java. :) –

+0

Спасибо за ответ, я также не знал об этой конвенции. Я рассмотрю некоторые руководства по стилю Java для получения советов по этому поводу. – xingyu

Смежные вопросы