Динамические формы весной - PullRequest
       17

Динамические формы весной

7 голосов
/ 17 сентября 2009

Я пытаюсь создать динамическую форму, используя формы Spring. По сути, форма получает название учебной деятельности, а под ней находится кнопка с надписью «Добавить еще одну учебную деятельность». Это позволяет пользователю добавить еще одно учебное действие. Я хочу, чтобы он мог добавлять столько, сколько он хочет.

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

<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 ]

8 голосов
/ 18 сентября 2009

Вы не можете использовать <<code>form:input> в javascript, потому что это тег jsp, который выполняется на стороне сервера.

Однако нет ничего волшебного в том, как ввод HTML связывается с полем в объекте команды Spring; это просто основано на имени. Итак, в вашем JavaScript, добавьте новый <input type="text" name="activity[1].activity"> (например - очевидно, вы увеличите индекс).

Другой вариант, который я использовал для более сложных элементов управления, - это захват HTML-кода существующего элемента управления (который был создан с использованием формы Spring: входной тег) и клонирование его, заменяя индексы увеличенным числом. Это станет намного проще, если вы используете jQuery.

ИЗМЕНЕНО ДЛЯ ДОБАВЛЕНИЯ: Одна проблема, которая может вызвать у вас проблемы: вы добавляете новое поле ввода в конец внешнего элемента div («текст»), что означает, что он не находится внутри тегов формы. Это не сработает.

1 голос
/ 17 сентября 2009

Является ли <form:input> тегом JSP? Если это так, то клиентский Javascript для добавления <form:input> узлов в DOM не будет иметь никакого эффекта - поскольку серверный JSP-механизм их не интерпретирует.

Ваш Javascript должен работать с необработанным HTML и DOM, таким как добавление элемента <input>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...