1

我有一个逻辑问题。允许用户向表单添加任意数量的字段。提交表单后,我需要收集所有字段的值并将它们存储在 ArrayList 中。问题是我不知道表单中是否只有 1 个字段,还是 500 个。

我区分单个表单字段的方法是在它们的名称中添加索引号,因此在表单中存在 name="field1"、name="field2" 等字段。

这是我到目前为止的代码:

for (int i = 1; i < number of fields; i++) {
    while (request.getParameter("field" + Integer.toString(i)) != null) {
        Add to ArrayList
    }
}

我怎样才能找到字段的数量?或者也许这个问题有另一种解决方案?

4

7 回答 7

4

使用 while 循环:

int i=0;

while (request.getParameter("field" + Integer.toString(i)) != null) {

    // Add to ArrayList

    i++; // very important, don't forget this one
}

// i is the count of fields at this point
于 2012-05-01T13:09:48.603 回答
0

这应该没问题:

i=1;

while (request.getParameter("field" + Integer.toString(i)) != null) {
        //Add to ArrayList
        i++;
}
于 2012-05-01T13:10:36.943 回答
0

java中有3种类型的循环。

  1. for 循环 - 当您确切知道必须迭代多少条目时使用。
  2. while 循环 - 当你不知道有多少时使用,可能是 0 - 500
  3. a do while - 当它必须运行至少一次并且之后任何次数时使用。

听起来您需要找出一种方法来检查字段是否存在并构造一段时间或执行一段时间,具体取决于他们是否能够输入 0

于 2012-05-01T13:12:01.687 回答
0

您可以使用 request.getParameterNames() 并循环浏览元素

for(Enumeration e = request.getParameterNames();
 e.hasMoreElements(); ){
                String parameterName = (String)e.nextElement();
             //Your code logic with the parameter.

}

这是一种更有效的逻辑,因为您不需要先计算参数的数量然后添加到ArrayList. null而且你不需要和 NPE一起玩

于 2012-05-01T13:12:53.527 回答
0

您的request对象应该具有有用的方法,例如getParameterNames枚举Strings 或getParameterMap不言自明的方法。这两者都可用于围绕所有参数设置循环,无论它们的数量如何。

高温高压

于 2012-05-01T13:13:48.493 回答
0
Enumeration<String> parameterNames = request.getParameterNames();
while (parameterNames.hasMoreElements()) {
  String parameterName = parameterNames.nextElement();
  if (parameterName.startsWith("field")) {
    Add request.getParameter(parameterName) to ArrayList
  }
}
于 2012-05-01T13:20:14.973 回答
0

您可以使用 getParameterValues() 获取所有值来执行此操作,您必须确保页面中的所有字段都应具有相同的名称。像这样

<input type="text" name="field" id="field1"/>
<input type="text" name="field" id="field2"/>
<input type="text" name="field" id="field3"/>
<input type="text" name="field" id="field4"/>

在服务器端你可以这样写

String[] arrFields  = request.getParameterValues("field");
for(String field: arrField)
{
      // put the field into the arraylist.
}
于 2012-05-01T13:35:36.123 回答