весенняя форма: привязка данных формы внутри c: forEach

#spring #forms #jsp #spring-mvc #data-binding

#весна #формы #jsp #spring-mvc #привязка данных

Вопрос:

Я хотел бы, чтобы некоторая привязка данных работала следующим образом:

 <c:forEach var="form" items="${forms}" varStatus="status">
  <form:form modelAttribute="form"> 
    <form:input path="key"/>
  </form:form>
</c:forEach>
  

Но проблема в том, что я думаю, что атрибут модели не может быть динамической ссылкой или, по крайней мере, я не знаю, как это выразить.

forms представляет собой набор объектов, которые имеют атрибут key .

Я нашел много других решений, которые, например, используют переменную состояния, например

 <form:input path="${forms[status.index].key}"/>
  

но мне нужно напрямую ссылаться на «ключ» вместо этого префикса доступа к массиву.

есть идеи, как этого добиться?

Ответ №1:

Попробуйте это,

 <form:form modelAttribute="${form}"> 
    <form:input path="${form.key}"/>
</form:form>
  

Кроме того, если вы используете Map коллекцию, вы можете получить доступ к значению с помощью ${form.value} .

В вашем коде <form:form modelAttribute="form"> укажите строку form как modelAttribute имя, а не фактическое значение, которое вы хотите привязать modelAttribute .

Комментарии:

1. Я уже пробовал это, не работает. «java.lang. Исключение IllegalStateException: ни BindingResult, ни простой целевой объект для имени компонента ‘de’ не доступны в качестве атрибута запроса» Я думаю, это связано с тем, что содержимое path должно быть фактическим путем относительно атрибута ModelAttribute формы, а не значением самого ключа

2. Это означает, что вы не используете этот атрибут модели в своих методах обработки запросов. Также я не понимаю, почему вы пытаетесь привязать только одно поле для каждой формы? Если это не входит в ваши намерения, переместите <form:form> тег за пределы <c:forEach> тега.

3. используется модель. если я просто напечатаю значение, например, <p>${form.key}</p> внутри forEach, оно отображается правильно.

4. Не могли бы вы поделиться своим методом обработки запросов, который использует de ModelAttribute ?

5. И я не могу переместить форму на один уровень вверх, потому что я хочу сгенерировать несколько форм, по одной форме для каждого объекта в списке. приведенная выше форма единого ввода была просто простым примером, чтобы проиллюстрировать мою проблему