我正在尝试使用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>
有帮助吗?

解决方案

您不能在javascript中使用<!> lt; form:input>,因为它是在服务器端运行的jsp标记。

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

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

已编辑添加: 一个可能导致问题的问题:您将新的输入框附加到外部div的末尾(<!> quot; text <!> quot;),这意味着它不在表单标记内。那不行。

其他提示

<form:input> JSP标记吗?如果是这样,那么客户端Javascript将<input>节点添加到DOM将不起作用 - 因为服务器端JSP引擎没有解释它们。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top