-->

在java的泛滥,检查复选框的HttpServlet请求的getParameter(httpserv

2019-09-20 11:28发布

我的窗体上有几个复选框(约15)和遇到的问题IM是复选框的名字只出现在枚举,如果他们进行检查,但我想他们都被退回,这样,当我打印的数据在它将有复选框的名字,并说“检查”或“未选中”。 我曾想过,我可能只是手动设置标志,看看有什么是存在,什么心不是,但是这似乎不远程有效的方法之一。

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();
        }

    }
}

Answer 1:

你应该想到的解决方法,因为作为@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 []),所以你将所有的复选框PARAMS名。 如果你得到一个参数的复选框的名字之一,值为空,这意味着checkboxe没有被检查。

编辑:澄清

那么,作为选中的复选框中不存在的请求,你不知道没有检查它的复选框,在JSP,但你需要知道它,才能在数据文件中写类似checkbox_name1 =选中。

那么,如何做到这一点? 首先,你需要知道什么复选框(取消与否)存在于请求。 对于这一点,你可以用下面的代码,并获得目前在JSP所有的复选框的名称:

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

然后,让寻找选中checboxes:

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");

}


Answer 2:

您可以使用复选框一起使用隐藏域。 遍历它们,并检查复选框选择的存在。

<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...
    }
}


Answer 3:

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



Answer 4:

创建隐藏字段

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

现在,在你的servlet为:字符串[]名称= request.getParameterValues( “复选框”);

    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();


文章来源: httpservlet request getparameter of unchecked and checked check boxes in java