【问题标题】:Dynamic Forms in SpringSpring中的动态表单
【发布时间】:2010-11-29 04:05:32
【问题描述】:

我正在尝试使用 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>

【问题讨论】:

    标签: java javascript spring-mvc spring


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我试过这样做,但生成的表单的值没有绑定到命令类。只有我在 spring 表单中明确设置的那个是绑定的,例如在上面的代码中:
    • "一个可能会给您带来问题的问题:您将新输入框附加到外部 div(“文本”)的末尾,这意味着它不在表单标签内。那不会不行。”我已经解决了这个问题,我在表单标签内的另一个 div 中附加了新的输入框,但附加的输入框仍然没有绑定。
    • 你能举一个你附加的输入框的例子吗?我已经使用这种方法来做到这一点并且它确实有效。一个名为“activity[1].activity”的输入框应该绑定到您的活动列表中的第二项(假设它有一个“活动”字段),等等。
    • 我终于成功了!非常感谢。 :) 这是我的博文:jeungun.wordpress.com/2009/09/18/…
    • @Jeune 哦,不,那个链接不起作用!你能帮我看看你在那里做了什么吗?
    【解决方案2】:

    &lt;form:input&gt; 是 JSP 标签吗?如果是这样,那么将 &lt;form:input&gt; 节点添加到 DOM 的客户端 Javascript 将无效 - 因为服务器端 JSP 引擎不会解释这些。

    您的 Javascript 需要使用原始 HTML 和 DOM,例如添加 &lt;input&gt; 元素。

    【讨论】:

    • 是的,它是 Spring 的 jsp 标签。我已经想过通过直接从请求中获取参数来暴力破解表单。但是,我想使用 Spring 的 SimpleFormController 功能将表单字段绑定到命令类。我只是想知道在我的情况下是否有办法做到这一点。干杯!
    猜你喜欢
    • 2011-06-05
    • 1970-01-01
    • 2013-08-31
    • 2015-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多