1

Декларирование атрибут модели сеанса, как:Spring Session Модель Атрибут Именование Convension

@SessionAttributes ("customer") 

код контроллера в основном для изменения объекта клиента:

@RequestMapping(value="/testlink", method=RequestMethod.GET) 
public String testLinkHandler(ModelMap modelMap){ 
    customerDao.getCustomer(111); 
    modelMap.put("customers", customerDao.getCustomers()); 
    Customer cust = customerDao.getCustomer(115); 
    if (cust == null){ 
     cust = new Customer(); 
    } 
    modelMap.put("customer", cust); 
    return "testlink"; 
} 
@RequestMapping(value="/testlink", method=RequestMethod.POST) 
public String testLinkHandler(@ModelAttribute Customer customer){ 
    customerDao.save(customer); 
    return "redirect:/testlink"; 
} 

С выше кода в POST метод объекта клиента загружается из сессия & опубликовала новое имя клиента с надлежащим идентификатором и, следовательно, редактирование клиента отлично работает и обновляет базу данных с измененным именем клиента.

Но в тот момент я изменить имя переменной модели и @SessionAttribute название от "customer" сказать "customerModel" или "customer_model" или "model" он больше не работает и над кодом вставляет новую запись в БД.

Итак, вопрос в том, существует ли соглашение об именах, которое должно соблюдаться здесь?

ответ

0

С помощью @SessionAttribute Spring получает экземпляр атрибута модели от session.

Следовательно, модель приписывать имя поля должно совпадать с сеансом атрибут имя, в этом случае customer

0

Если требуется изменение имени атрибута, то вы можете использовать:

@SessionAttributes (types = {Customer.class}) 

Теперь, когда вы положили ваш modelClass типа Customer весной Model, тогда он будет автоматически установлен в сеансе.

1
public String testLinkHandler(@ModelAttribute Customer customer){ ... } 

Этот метод ожидает, что объект с именем customer быть доступным для связывания. При использовании @ModelAttribute без атрибутов Spring MVC пытается вывести имя атрибута model из имени аргумента метода.

Теперь, если вы решили переименовать модель вы приписываете должны либо

  1. Переименовать метод аргумент соответственно
  2. Поставка имя к @ModelAttribute.

Как я не хотел бы предложить вариант 1, который оставляет вариант 2.

public String testLinkHandler(@ModelAttribute("your-model-name-here") Customer customer){ ... }