Динамическая опалубка весной

Я пытаюсь сделать динамическую форму, используя весенние формы. В принципе, форма получает название учебной деятельности, а затем под ней есть кнопка "добавить еще одну учебную деятельность". Это позволяет пользователю добавить еще одну учебную деятельность. Я хочу, чтобы он мог добавить столько, сколько захочет.

Я не пробовал это раньше, поэтому, очевидно, я столкнулся с ошибками с первым решением, которое я подумал. У меня было чувство, что то, что я сделал, породит ошибка, но просто диск домой, что я пытаюсь сделать, вот код:

<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> элемент.