Динамическая опалубка весной
Я пытаюсь сделать динамическую форму, используя весенние формы. В принципе, форма получает название учебной деятельности, а затем под ней есть кнопка "добавить еще одну учебную деятельность". Это позволяет пользователю добавить еще одну учебную деятельность. Я хочу, чтобы он мог добавить столько, сколько захочет.
Я не пробовал это раньше, поэтому, очевидно, я столкнулся с ошибками с первым решением, которое я подумал. У меня было чувство, что то, что я сделал, породит ошибка, но просто диск домой, что я пытаюсь сделать, вот код:
<script language="javascript">
fields = 0;
function addInput() {
document.getElementById('text').innerHTML += "<form:input path='activity[fields++].activity'/><br />";
}
<div id="text">
<form:form commandName="course">
Learning Activity 1
<form:input path="activity[0].activity"/>
<input type="button" value="add activity" onclick="addInput()"/>
<br/><br/>
<input type="submit"/>
</form:form>
<br/><br/>
</div>
2 ответов
вы не можете использовать form:input> в javascript, потому что это тег jsp, который работает на стороне сервера.
однако нет ничего волшебного в том, как вход HTML привязывается к полю в объекте Spring command; он просто основан на имени. Поэтому в вашем javascript добавьте новый
<input type="text" name="activity[1].activity">
(например, очевидно, что вы увеличите индекс).
другой вариант, который я использовал для более сложных элементов управления, - это захватить HTML существующего элемента управления (который был создан используя форму Spring: входной тег) и клонировать его, заменяя индексы на увеличенное число. Это становится намного проще, если вы используете jQuery.
ИЗМЕНИТЬ ДОБАВИТЬ: Одна проблема, которая может вызвать проблемы: вы добавляете новое поле ввода в конец внешнего div ("текст"), что означает, что оно не находится внутри тегов формы. Это не сработает.
Is <form:input>
тег JSP? Если да, то клиентский Javascript для добавления <form:input>
узлы к DOM не будут иметь никакого эффекта-так как серверный движок JSP не интерпретирует их.
ваш Javascript должен работать с raw HTML и DOM, например, добавлять <input>
элемент.