Как сделать часть модели в Spring MVC? - PullRequest
0 голосов
/ 26 июня 2010

Я работаю над проблемой учебника, используя Spring MVC, с другим товарищем по команде для прохождения практики.Я не знаком с Spring (вот почему я его изучаю)

Сначала мы написали код без какой-либо поддержки фреймворка, обычный старый рукописный MVC

Мы используем Spring 2.5,и интегрированный Hibernate, использовал аннотации Autowire, Controller, Repository и т. д. Я пока не заинтересован в представлении.Таким образом, мы связались с базой данных, но модели остались старыми, что-то вроде:

public class Client {

 private String name;
 private String bankAccount;

 public String getName() {
  return name;
 }

 public String getBankAccount() {
  return bankAccount;
 }

 public Client(String name, String bankAccount) {
  this.name = name;
  this.bankAccount = bankAccount;
 }
}

Как эта модель правильно выполнена как часть 'M' в Spring 2.5 MVC?Я думаю, что-то между линиями автопроводки, инжектором конструктора и оставаясь неизменным.

Я просто не могу понять, как это правильно делается в рамках.Любая помощь будет принята с благодарностью, спасибо.

Ответы [ 3 ]

3 голосов
/ 28 июня 2010

По сути, ваша модель - это способ передачи информации в представление от контроллера, поэтому ваш объект модели на самом деле просто в порядке, никаких изменений не требуется.Чтобы использовать каркас с вашей моделью, вы будете делать что-то вроде этого:

Ваш контроллер:

@RequestMapping(value="/client/view")
public String viewClientPage(Model m) {

   Client c = new Client( "Jeffrey", "123456" );
   m.addAttribute( "client", c );
   return "[name of a client using view goes here]";

}

, тогда у вас будет представление, которое делает что-то вроде этого:

<h1>Name : ${client.name}</h1>
<h2>Account Number : ${client.account}</h2>

Одна вещь, которую следует иметь в виду для ваших моделей (ваши уже это делают), - вам понадобятся геттеры для свойств, которые вы хотите показать через язык выражений ${client.name} сопоставлен с client.getName(), вы можетене делайте что-то вроде ${client.getAccount(2)}, чтобы получить третий аккаунт, который у них есть

2 голосов
/ 29 июня 2010

Сконфигурируйте ваши модели так, чтобы они сохранялись

Если они действительно должны сохраняться там, вы, скорее всего, сделаете это с JPA / Hibernate и некоторыми аннотациями:

@Entity @Table(name="person")
public class Person extends AbstractEntity {

  private long id;
  private String email;

  @Id
  @Column(name="id")
  public long getId() { return this.id; }

  @Column(name="email")  
  public String getEmail() { return this.email; }

  // also setters, but they don't need annotations
}

обратите внимание, что вы можете избежать некоторых аннотаций, следуя соглашениям, но вы, возможно, захотите избежать этого, пока вы учитесь, так как это может быть трудно начать работу и сопровождается загадочными ошибками, которые трудно отследить; Ставка, чтобы начать явно с весны

Не сохранившиеся модели

Разработайте их аналогично, за исключением того, что вам не нужны аннотации БД. Я бы порекомендовал поместить их в другую упаковку, чтобы было понятно, для чего нужны ваши модели. Возможно, у вас их нет, в зависимости от решаемой проблемы

Сделать доступным для просмотра

Самый простой способ - сделать методы вашего контроллера такими:

@RequestMapping(value="/person/{id}")
public ModelAndView handleRequest(@PathVariable long personId) {
    Person p = findPerson(id);
    return new ModelAndView("view name goes here")
      .addAttribute(p); // bean is automatically named "person"
}

Чтобы это работало, вам нужно настроить DefaultAnnotationHandlerMapping в вашем dispatcher-servlet.xml, чтобы это работало.

1 голос
/ 28 июня 2010

Ваши "старые" модели выглядят на основе POJO, которая является ядром Spring-MVC. В большинстве случаев вы можете добавить свои объекты Model или специфичное для представления представление (DTO / Value-Object) к объекту Spring Model (прославленный hashmap) и получить к ним доступ непосредственно в своем представлении.

Никаких специальных классов или других битов не требуется.

С точки зрения неизменности, внедрения и т. Д. - это вопрос дизайна ваших объектов, если они представляют объекты / значения, которые не должны изменяться (например, Валюта, Даты и т. Д.), То применяются нормальные правила неизменности - обычно это одно ваши сервисные классы Spring создадут их в качестве фабрики или хранилища.

Это помогает прояснить ситуацию?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...