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

httpservlet请求java中未选中和选中复选框的getparameter,java,servlets,getparameter,Java,Servlets,Getparameter,我的表单上有几个复选框(大约15个),我遇到的问题是,复选框的名称只有在选中的情况下才会出现在枚举中,但我希望返回所有复选框,以便在打印数据时,它会有复选框的名称,并说“选中”或“未选中”。我曾想过一种方法,我可以手动设置标志来查看什么是存在的,什么是不存在的,但这似乎一点也不有效 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOExcep

我的表单上有几个复选框(大约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();
        }

    }
}
public void doGet(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException
{
尝试
{
FileWriter=newfilewriter(“OrderFormData.csv”);
writer.append(“字段名”);
writer.append(',');
附加(“价值”);
writer.append('\n');
@抑制警告(“未选中”)
枚举paramNames=request.getParameterNames();
while(paramNames.hasMoreElements())
{
字符串paramName=(字符串)paramNames.nextElement();
writer.append(paramName);
writer.append(',');
字符串[]paramValues=request.getParameterValues(paramName);
如果(paramValues.length==1)
{
字符串paramValue=paramValues[0];
if(paramValue.length()==0)
{
writer.append(“无值”);
writer.append('\n');
}
其他的
{
writer.append(参数值);
writer.append('\n');
}
}
其他的
{

对于(int i=0;i未选中的框将不属于请求的一部分:请参阅,您可以将隐藏字段与复选框一起使用。遍历它们并检查复选框选择是否存在

<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...
    }
}
Enumeration paramNames=req.getParameterNames();
while(paramNames.hasMoreElements()){
字符串paramName=paramNames.nextElement();
如果(!paramName.endsWith(“\u option”))继续;//跳过复选框。仅处理隐藏字段
String[]options=req.getParameterValues(paramName);//所有选项
String[]selections=req.getParameterValues(paramName.replace(“_option)”,“”);//实数复选框
List selectionList=Arrays.asList(选择);//更易于使用
//遍历复选框组选项
用于(字符串o:选项){
布尔包含=selectionList.contains(o);
//用它做点什么。在文件中写是/否,例如。。。
}
}

您应该考虑解决方案,因为正如@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" />
然后,让我们查找未选中的复选框:

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

}
for(int i=0;i
根据需要创建隐藏字段


现在,在servlet中显示为: String[]name=request.getParameterValues(“复选框”)

PrintWriter pw=新的PrintWriter(新文件(“/Desktop/sticker.txt”);
for(int i=0;i
我以前见过这个解决方案,它如何帮助确定哪些已检查,哪些未检查?请小心。如果您使用相同的名称(“水果”)对于所有复选框,您将使用一组复选框,其中只有一个复选框可以被选中。这是真的。我可能在一个窗体上使用了类似的东西,该窗体具有大量的动态复选框和单选按钮。后者必须在一组中,并且相同的代码适用于这两个复选框。我的问题是,我不能在dat中保留隐藏的文本字段一个文件,因为这将被导入到另一个程序中。该文件按字段名称和值列出…如果为true,它将同时返回这两个值,但我只希望它在为true时返回实际复选框,而不返回隐藏的复选框“数据文件”是什么意思?隐藏字段只是请求的一部分。这里的目标是找出那些未选中的复选框的名称,以便您可以随心所欲地使用它们。im将数据从表单导出到csv文件,格式为:field name field value它不会返回隐藏字段吗?因为如果我理解正确,它会当实际复选框为true时,它将返回隐藏的文本字段,当它为false时,它将返回隐藏的文本字段,这不是desiredOK。那么问题出在哪里?如果您有一个复选框列表(选中和未选中),在请求中查找它们,如果有param,复选框被选中,如果没有,复选框被选中。对不起,我不是想表现得粗鲁或其他什么。我只是诚实地不知道这对解决我的问题是如何起作用的。我不怀疑它是否起作用,我只是想了解它是如何实现的,我真的只是想了解。比如,我是如何做到的这个方法是否返回:fieldname字段值chkbox1 true chkbox1text false chkbox2 false chkbox2text false其中chkbox1text和chkbox2text是隐藏的文本框。如果是,我想消除同一个“元素”(复选框和隐藏字段)的true和false
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");

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