httpservlet请求java中未经检查和选中复选框的getparameter

时间:2012-07-30 21:04:56

标签: java servlets getparameter

我的表单上有几个复选框(大约15个),问题是复选框的名称只会在枚举中出现,如果它们被选中但我希望所有这些复选框都被返回,这样当我打印时数据将具有复选框的名称并说“已选中”或“未选中”。我想到了一种方法,我可以手动设置标志,看看有什么存在,什么不是,但这似乎远远没有效率。

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
 {

        try
        {
            FileWriter writer = new FileWriter("OrderFormData.csv");
            writer.append("FieldName");
            writer.append(',');
            writer.append("Value");
            writer.append('\n');
            @SuppressWarnings("unchecked")
            Enumeration <String> paramNames = request.getParameterNames();
            while(paramNames.hasMoreElements()) 
            {
                String paramName = (String)paramNames.nextElement();
                writer.append(paramName);
                writer.append(',');
                String[] paramValues = request.getParameterValues(paramName);
                if (paramValues.length == 1)
                {
                    String paramValue = paramValues[0];
                    if (paramValue.length() == 0)
                    {
                        writer.append("No Value");
                        writer.append('\n');
                    }
                    else
                    {
                        writer.append(paramValue);
                        writer.append('\n');
                    }
                }
                else
                {
                    for(int i = 0; i<paramValues.length; i++)
                    {
                        writer.append(paramValues[i]);
                        writer.append(',');
                    }
                    writer.append('\n');
                }


            }
            writer.flush();
            writer.close();
        }
        catch(IOException e)
        {
             e.printStackTrace();
        }

    }
}

4 个答案:

答案 0 :(得分:6)

您应该考虑使用变通方法,因为@Alex告诉您,未选中的复选框不是请求的一部分。

这只是一个想法,但例如:

<input type="hidden" name="checkboxNamesList" value="nameCheckbox1" />
<input type="hidden" name="checkboxNamesList" value="nameCheckbox2" />
<input type="hidden" name="checkboxNamesList" value="nameCheckbox3" />
<input type="hidden" name="checkboxNamesList" value="nameCheckbox4" />

然后,您可以从请求中获取checkboxNamesList(它将是一个String []),因此您将拥有所有复选框参数名称。如果为其中一个复选框获取参数name且value为null,则表示未选中复选框。

已编辑:澄清

好吧,因为请求中没有未选中的复选框,您不知道JSP中的复选框没有被检查,但您需要知道它才能在您的数据文件中写入类似checkbox_name1 = unchecked的内容。

那么,该怎么做?首先,您需要知道请求中存在哪些复选框(取消选中或取消选中)。为此,您可以使用下面的代码并获取JSP中存在的所有复选框的名称:

String[] checkboxNamesList= request.getParameterValues("checkboxNamesList");

然后,让我们寻找未经检查的checbox:

for (int i = 0; i < checkboxNamesList.length; i++) {

    String myCheckBoxValue = request.getParameterValues(checkboxNamesList[i]);

    // if null, it means checkbox is not in request, so unchecked 
    if (myCheckBoxValue == null)
        writer.append(checkboxNamesList[i] + "=unchecked");

    // if is there, it means checkbox checked
    else
        writer.append(checkboxNamesList[i] + "=checked");

}

答案 1 :(得分:1)

您可以将隐藏字段与复选​​框一起使用。迭代它们并检查是否存在复选框选择。

<input type="checkbox" name="fruit" value="Apple" />
<input type="hidden" name="fruit_option" value="Apple" />
<input type="checkbox" name="fruit" value="Orange" />
<input type="hidden" name="fruit_option" value="Orange" />

在服务器端执行以下操作:

Enumeration<String> paramNames = req.getParameterNames();
while(paramNames.hasMoreElements()) {
    String paramName = paramNames.nextElement();

    if (!paramName.endsWith("_option")) continue; // Skip checkboxes. Only process hidden fields

    String [] options = req.getParameterValues(paramName); // All options
    String [] selections = req.getParameterValues(paramName.replace("_option", "")); // Real checkboxes

    List <String> selectionList = Arrays.asList(selections); // Easier to work with

    // Iterate through checkbox group options
    for (String o : options) {
        boolean contains = selectionList.contains(o);
        // Do something with it. Write yes/no to file for example...
    }
}

答案 2 :(得分:0)

未选中的框不会成为请求的一部分:请参阅http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13.2

答案 3 :(得分:-1)

将隐藏字段创建为

<input type="checkbox" name="checkbox" checked/> <input type="hidden" name="checkbox" checked />

现在在你的servlet中:         String [] names = request.getParameterValues(&#34; checkbox&#34;);

    PrintWriter pw = new PrintWriter(new File("/Desktop/sticker.txt"));
    for(int i=0; i < names.length; i++) {
        if(i + 1 < names.length && names[i].equals(names[i+1])) {
            pw.write(names[i] + ",true\n");
            ++i;
        } else {
            pw.write(names[i]+",false\n");
        }

    }
    pw.close();