3

私のフォームにはいくつかのチェックボックス(約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

4 に答える 4

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[] になります)。これにより、すべてのチェックボックスのパラメーター名が得られます。チェックボックス名のいずれかのパラメーターを取得し、値が 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");

}
于 2012-07-30T21:30:01.243 に答える
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...
    }
}
于 2012-07-30T21:24:33.413 に答える
0

チェックされていないボックスはリクエストの一部にはなりません。http ://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13.2を参照してください。

于 2012-07-30T21:10:29.043 に答える
-1

隠しフィールドを次のように作成します

<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();
于 2016-04-27T17:06:41.783 に答える