Как напечатать в ‹form:input› значение Set, которое является полем основного объекта формы

У меня есть объект под названием Меню. У него есть поле с именем voceMenuList, которое представляет собой набор

@Component
@Entity
@Table(name="menu")
@Configurable
public class Menu implements Serializable{      
    ....        
    @OneToMany(mappedBy="menu", fetch=FetchType.EAGER)
    private Set<VoceMenu> voceMenuList; 

    public Set<VoceMenu> getVoceMenuList() {
        return voceMenuList;
    }

    public void setVoceMenuList(Set<VoceMenu> voceMenuList) {
        this.voceMenuList = voceMenuList;
    }
    .....   
}

Я пытаюсь создать форму для сохранения или обновления меню. Я сделал что-то, связав это:

<form:form action="editMenu" method="post" commandName="menu">        
    ......  
    <c:forEach items="${menu.voceMenuList}" varStatus="counter">            
        <form:input path="voceMenuList[${counter.index}].id" maxlength="11"/>
     .....

Но когда я пытаюсь сохранить меню объекта, я получаю эту ошибку:

Invalid property 'voceMenuList[0]' of bean class [com.springgestioneerrori.model.Menu]: Cannot
get element with index 0 from Set of size 0, 
accessed using property path 'voceMenuList[0]'

То, как я обращаюсь с forEach, неправильно


person MDP    schedule 13.02.2015    source источник
comment
Может помочь вставка всего класса menu (и, пожалуйста, используйте заглавные буквы в именах классов!)   -  person Smutje    schedule 13.02.2015
comment
Можете ли вы показать геттер и сеттер menulink?   -  person Jens    schedule 13.02.2015


Ответы (1)


Путь относится к вашему commandName, и вы получаете проблему, потому что фреймворк пытается найти свойство voceMenu внутри вашего bean-компонента Menu, вы должны использовать объект состояния JSTL, что-то вроде

<c:forEach items="${menu.voceMenuList}" var="voceMenu" varStatus="count">

и тогда

<form:input path="voceMenuList[${count.index}].id" maxlength="11"/>

чтобы правильно связать значения

ОБНОВЛЕНИЕ вашего комментария

Дальнейшая проблема, с которой вы сталкиваетесь, связана с динамическим добавлением в набор, этот пост хорошо объясняет это и перечисляет возможные решения Spring 3 MVC: один-ко-многим в динамической форме (добавить/удалить при создании/обновлении)

Вы всегда можете выбрать использование bean-компонента для поддержки формы и впоследствии заполнить свою сущность. Это поможет вам решить эту проблему и отделит ваше представление от сущности, например. сделать его более устойчивым к изменениям имени свойства

person Master Slave    schedule 13.02.2015
comment
Теперь я могу правильно распечатать страницу jsp, но когда я пытаюсь сохранить меню объекта, я получаю сообщение об ошибке. я отредактировал свой пост - person MDP; 13.02.2015