#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. И я не могу переместить форму на один уровень вверх, потому что я хочу сгенерировать несколько форм, по одной форме для каждого объекта в списке. приведенная выше форма единого ввода была просто простым примером, чтобы проиллюстрировать мою проблему