2015-08-27 3 views
0

В простой программе Spring MVC и я столкнулся с strange design: pet ['new']. Я не видел эту конструкцию раньше и кому-то нужно объяснить ее семантику. Вероятно, это относится к this class.

Вторая линия

<c:choose> 
    <c:when test="${pet['new']}"> 
     <c:set var="method" value="post"/> 
    </c:when> 
    <c:otherwise> 
     <c:set var="method" value="put"/> 
    </c:otherwise> 
</c:choose> 

И контроллер

@RequestMapping(value = "/owners/{ownerId}/pets/new", method = RequestMethod.GET) 
public String initCreationForm(@PathVariable("ownerId") int ownerId, Map<String, Object> model) { 
    Owner owner = this.clinicService.findOwnerById(ownerId); 
    Pet pet = new Pet(); 
    owner.addPet(pet); 
    model.put("pet", pet); 
    return "pets/createOrUpdatePetForm"; 
} 
+0

Не могли бы вы включить примеры в вопросе, чтобы спасти людей от охоты вокруг, пожалуйста? –

ответ

0

JavaBean в свойство 'Foo' из фасоли 'бар' могут быть доступны с двумя формами синтаксиса: bar.foo или bar['foo']. Они выбрали вторую здесь, чтобы ссылаться на свойство bean-компонента new, то есть на гейтер isNew() в BaseEntity.

Таким образом, критерий эквивалентен коду Java

if (pet.isNew()) 
+0

Вау, я даже заметил метод 'isNew()'. Большое спасибо за объяснение. – Lancaster

+0

Ответ был бы лучше, если бы он объяснил, почему автор использовал '$ {pet ['new']}' вместо '$ {pet.new}'. – BalusC

+0

@BalusC Я согласен, но у меня нет окончательного ответа. Я не нашел 'new' в списке зарезервированных слов в спецификациях. Таким образом, либо я пропустил его, либо какая-то проблема с сервером возникла проблема с 'pet.new' и' pet ['new'] 'был использован, чтобы обойти это, или автор думал, что это вызовет проблему и предвосхищает это. Не стесняйтесь редактировать мой ответ, если у вас есть объяснение. –

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