отслеживание нескольких связанных полей ввода с помощью spring mvc

у нас есть список объектов домена, которые необходимо отредактировать на html-странице. Например, объекты команды и домена:

class MyCommand {
    List<Person> persons;
}

class Person {
    String fname;
    String lname;
}

Затем HTML-код, который я ожидаю от генерируемых библиотек тегов Spring MVC, выглядит следующим образом:

<form>
   <input name="persons[0].fname">&nbsp;<input name="persons[0].lname"><br/>
   <input name="persons[1].fname">&nbsp;<input name="persons[1].lname"><br/>
   <input name="persons[2].fname">&nbsp;<input name="persons[2].lname"><br/>
   ...
   <input name="persons[n].fname">&nbsp;<input name="persons[n].lname"><br/>
</form>

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

Какие-нибудь советы?


person Edward Q. Bridges    schedule 13.12.2009    source источник


Ответы (1)


Невозможно просто заставить теги Spring Form генерировать весь список на основе коллекции (это будет сделано для параметров в поле выбора, но это единственное расширение на основе коллекции, о котором я знаю). Однако вы все равно можете использовать теги Spring Form в цикле следующим образом:

<c:forEach var="person" varStatus="loopStatus" items="myCommand.persons">
   <form:input path="persons[${loopStatus.index}].fname" />&nbsp;<form:input path="persons[${loopStatus.index}].lname" /><br />
</c:forEach>
person Jacob Mattison    schedule 13.12.2009
comment
@eqbridges, ты уверен, что это работает??? Я получаю сообщение о недопустимом свойстве "persons [0]" класса bean. Свойство MyClass.Bean "persons [0]" не читается или имеет недопустимый метод получения: - person Jaikrat; 07.04.2015
comment
@Jaikrat - этот код предполагает, что bean-компонент, к которому вы привязываете форму, имеет свойство person, которое представляет собой коллекцию, которой можно назначить использование persons[0] и persons[1] и т. д. - например, list. Ваша ошибка предполагает, что это не так в вашем bean-компоненте. У вас есть собственность persons? Если так, то, что это? - person Jacob Mattison; 07.04.2015
comment
Привет, @JacobMattison. Спасибо за ответ. Я понимаю. Моя структура класса не совсем такая же, как и выше. Это немного сложнее. Например, у меня есть один класс PayForm, внутри него у меня есть один атрибут типа Issuer, внутри Issuer у меня есть один список AddressBean, и этот AddressBean имеет одну переменную типа Amount, которая имеет одну переменную сумму. Итак, этот список addressBean у меня есть 2 отображения и получения данных позже из поля ввода (сумма). Прямо сейчас я не могу опубликовать код того, что я пробовал, потому что я дома. Но если вы его получите, пожалуйста, помогите мне. Я должен показать/выбрать то же поле ввода (сумма). - person Jaikrat; 07.04.2015
comment
Хм, хорошо... трудно ответить, не видя кода (и вы можете задать новый вопрос, ссылку на который вы, конечно же, можете опубликовать здесь), но... в общем, если вы привязываетесь к свойству свойства чего-либо в коллекции, вам может потребоваться сделать что-то вроде `path=issuer.addresses[${loopStatus.index}].amount,whatever`, то есть вы проходите через любой уровень пути к объекту. имеет коллекцию. Это также требует, чтобы методы получения и установки существовали на каждом уровне. - person Jacob Mattison; 07.04.2015
comment
Да, спасибо. Его здесь -that" title="как перебрать список из одного tpye и показать данные выборки из поля ввода из этого"> stackoverflow.com/questions/29508868/ - person Jaikrat; 08.04.2015