Java 在服务器端处理动态表单

Java 在服务器端处理动态表单,java,javascript,jquery,Java,Javascript,Jquery,我在这里看到了很多关于在jQuery或其他javascript库中实现动态表单的问题,我想我已经成功地建立并运行了一个动态表单,用于测试目的 我的问题是,命名表单字段并在服务器端处理它们的最佳实践是什么 我正在尝试实现一个类似联系人的表单,其中用户可以添加多个电话号码(和类型)以及多个地址(和类型),类似于下面的代码,这是将动态复制的代码块 <div id="phones"> <label>Phone Number</label><input type=

我在这里看到了很多关于在jQuery或其他javascript库中实现动态表单的问题,我想我已经成功地建立并运行了一个动态表单,用于测试目的

我的问题是,命名表单字段并在服务器端处理它们的最佳实践是什么

我正在尝试实现一个类似联系人的表单,其中用户可以添加多个电话号码(和类型)以及多个地址(和类型),类似于下面的代码,这是将动态复制的代码块

<div id="phones">
<label>Phone Number</label><input type="text" name="phone1" value="" />
<label>Type</label><input type="text" name="type1" value="" />
</div>

电话号码
类型
然后我将有一个+/-链接或按钮来添加另一个电话或删除一个电话。当我提交表单时,处理name/type组合的最佳方式是什么 我应该使用如上所示的名称,并使用后缀id,如phone1/type1,还是应该使用数组命名,如phone[]/type[],并根据索引匹配服务器上的对

我正在使用java(不确定它是java还是php或其他什么东西是否会有区别),但这样做的最佳实践是什么


谢谢,带索引的方括号似乎是大多数框架所期望的,但它完全取决于您的框架。在Java世界中,考虑到大约有一百万个不同的框架,您必须从框架所期望的开始,并适当地调整Javascript代码

我所熟悉的唯一一个Java框架就是Stripes,它需要方括号。如果你的豆子有一个属性

private List<Address> addresses;
public List<Address> getAddresses() { return addresses; }
public void setAddresses(final List<Addresses>) { this.addresses = addresses; }
私有列表地址;
公共列表getAddresses(){返回地址;}
public void setAddresses(最终列表){this.addresses=addresses;}
然后,输入将需要诸如“地址[0].street1”、“地址[0].street2”等名称。当为新地址添加新块时,将有与“1”相同的字段,而不是“0”


但是,不同的Java框架可能会以完全不同的方式进行操作。

在您的情况下,应该对字段进行专门编号。不要使用数组命名约定,这在过去让我非常头疼

如果您使用阵列,当参数丢失时,您将面临类型和电话值不匹配的风险。有些浏览器只是忽略空值

为了帮助服务器检索所有参数,我通常将字段数放在一个隐藏字段中。因为表格是这样的

<div id="phones">
<input type-"hidden" name="count" value="3" />
<ul>

<li>
<label>Phone Number</label><input type="text" name="phone1" value="" />
<label>Type</label><input type="text" name="type1" value="" />
</li>
<li>
<label>Phone Number</label><input type="text" name="phone2" value="" />
<label>Type</label><input type="text" name="type2" value="" />
</li>
<li>
<label>Phone Number</label><input type="text" name="phone3" value="" />
<label>Type</label><input type="text" name="type3" value="" />
</li>
</ul>
</div>

  • 电话号码 类型
  • 电话号码 类型
  • 电话号码 类型

目前我将使用Grails。我在某个地方读到,我可以使用这个def phones=params.list('phone')列出参数值,def types=params.list('type'),因为我将所有电话输入都称为“phone”,所有类型输入都称为“type”,这让我想到@zz coder提到的一点,这是否保证列表是同步的(即,如果第二部手机上的输入为空,而第三部手机上的输入为空,则列表长度是否相同)?这依赖于浏览器吗?我用grails试过,它在FF、Chrome和Opera上运行正常。我仍然需要用IE验证当我有空值时数组是否会扭曲。隐藏输入似乎是个好主意。我过去总是用这种方法对ID进行后期修复,但我想知道这样做是否正确。