Search code examples
javaservletsgetparameter

httpservlet request getparameter of unchecked and checked check boxes in java


my form has several checkboxes on it (around 15) and the issue im having is that the names of the check boxes only appear in the enumeration if they are checked but i want all of them to be returned so that when i print the data it will have the name of the checkbox and say "checked" or "unchecked". i had thought of one way that i could just manually set the flag to see what is present and what isnt, but that doesnt seem remotely efficient.

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

    }
}

Solution

  • You should think in a workaround because as @Alex told you, unchecked checkboxes are not part of the request.

    This is just an idea, but for example:

    <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" />
    

    Then, you can get checkboxNamesList from the request (it will be a String[]) so you will have all the checkboxes params names. If you get a parameter for one of the checkboxes name and value is null, it means that checkboxe was not checked.

    Edited: clarification

    Well, as unchecked checkboxes are not present in the request you don't know whose checkboxes in the JSP were not checked but you need to know it in order to write in your data file something like checkbox_name1=unchecked.

    So, how to do that? First, you need to know what checkboxes (uncheck or not) were present in the request. For that, you can use the code below and get name of all checkboxes present in the JSP:

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

    Then, let look for unchecked 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");
    
    }