2009-09-17 72 views
6

我想使用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> 

回答

7

您不能在JavaScript内使用< form:input>,因为它是在服务器端运行的jsp标记。

然而,关于HTML输入如何绑定到Spring命令对象中的字段没有什么神奇的;它只是基于名称。因此,在您的JavaScript,添加一个新的 <input type="text" name="activity[1].activity"> (例如 - 显然你会增加索引)。

我用于更复杂的控件的另一个选项是获取现有控件的HTML(使用Spring form:input标签创建)并克隆它,用增加的数字替换索引。如果你使用jQuery,这会变得更容易。

编辑添加: 一个问题可能会导致您的问题:您将新的输入框附加到外部div(“text”)的末尾,这意味着它不在form标签内。这是行不通的。

+0

我试过这样做,但生成的表单的值没有绑定到命令类。只有我明确在春天窗体中设置的那个被绑定,例如在上面的代码中: Jeune 2009-09-18 13:05:07

+0

“可能会导致问题的一个问题:新的输入框到你的外部div(“text”)的末尾,这意味着它不在form标签内,这是行不通的。“ 我已经解决了这个问题,我在表单标签内的另一个div里面添加了新的输入框,但是附加的输入框不会绑定。 – Jeune 2009-09-18 16:05:58

+1

你能举一个你的附加输入框的例子吗?我已经使用这种方法来做到这一点,它确实有效。名为“activity [1] .activity”的输入框应绑定到活动列表中的第二个项目(假设它有一个“活动”字段)等。 – 2009-09-18 17:26:27

1

<form:input>一个JSP标签?如果是这样,那么客户端JavaScript将<form:input>节点添加到DOM将不起作用 - 因为服务器端JSP引擎不解释这些。

您的Javascript需要使用原始HTML和DOM,例如添加<input>元素。

+0

是的,它是Spring的jsp标签。我想通过直接从请求中获取参数来暴力破解表单。但是,我想使用Spring的SimpleFormController功能将表单字段绑定到命令类。 我只是想知道是否有办法在我的情况下做到这一点。 干杯! – Jeune 2009-09-17 15:37:13