httpservlet запрос getparameter непроверенных и проверенных флажков в Java

В моей форме есть несколько флажков (около 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 ответа

Решение

Вы должны подумать об обходном пути, потому что, как сказал @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 из запроса (это будет строка []), так что вы будете иметь все имена флажков параметров. Если вы получаете параметр для одного из флажков name, а значение равно null, это означает, что флажок не был установлен.

Отредактировано: уточнение

Что ж, поскольку в запросе нет флажков, вы не знаете, чьи флажки в JSP не были проверены, но вам нужно знать их, чтобы записать в файл данных что-то вроде checkbox_name1=unchecked.

Итак, как это сделать? Во-первых, вам нужно знать, какие флажки (не отмечены или нет) присутствовали в запросе. Для этого вы можете использовать код ниже и получить имя всех флажков, присутствующих в JSP:

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

Затем, давайте поищем непроверенные чекбоксы:

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

}

Вы можете использовать скрытые поля вместе с флажками. Перебирайте их и проверяйте наличие флажка выбора.

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

Снятые флажки не будут частью запроса: см. http://www.w3.org/TR/REC-html40/interact/forms.html

Создать скрытые поля как

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

Теперь в вашем сервлете есть: String[] names = request.getParameterValues ​​("checkbox");

    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();
Другие вопросы по тегам