1

複数選択ボックスでチェックした要素 (カテゴリ) を含む POST 要求を jQuery がサーバーに送信する JSP ファイルがあります。サーバーは、チェックされたすべてのカテゴリを含む文字列を分析し、サブジェクトのリストを返します。これにより、jQuery がそれを分析し、サブジェクトを別の複数選択で表示できます。

唯一の問題は、カテゴリにチェックマークを付けないと、jQuery は空のパラメーターをサーバーに送信しますが、サーバーはそれを null として検出しません!

「」を表示するアラートを試してみましたが、うまくいきません! サーバーは、明らかに if 条件のコードに関連する NullPointerException のふりをしてクラッシュします。

これが私のコードです:

 === JSP ===

<script>
                $(document).ready(function ()  
                    {
                        $('#subjectCategories').change(function()
                            {
                                var selectedOptions = $('#subjectCategories option:selected');
                                var selectedValues = $.map(selectedOptions ,function(option) 
                                {
                                    return option.value;
                                }).join(',');

                                $.ajax({
                                       type: "POST",
                                       url: "creation",
                                       data: 'selectedSubjectCategories='+selectedValues,
                                       success: function(data)
                                       {
                                           if (data!=null)
                                            {
                                                   //alert("\""+data+"\"");
                                                   var subjects = data.split(',');
                                                   var select = $('#subjectslist');
                                                    $('#subjectslist').children().remove();
                                                   $.each(subjects, function(key, subject) 
                                                   {
                                                       if (select.find('option[value="' + subject + '"]').length === 0 && subject!="") 
                                                       {
                                                             //Ajouter la nouvelle catégorie dans la liste
                                                               $('<option>', {
                                                                 value: subject,
                                                                 text: subject
                                                                 }).appendTo(select);
                                                       }
                                                   });
                                            }
                                           else
                                            {
                                                $('#subjectslist').children().remove();
                                            }
                                       }
                                     });
                            }
                        );
                    }).change();
              </script>

=== サーブレット ===

            if (request.getParameter("selectedSubjectCategories")!=null)
        {
            String[] categoryList = request.getParameter("selectedSubjectCategories").split(",");

            ArrayList<String> pourDoublons = new ArrayList<String>();
            String subjectsToShow = new String();

            for (int i=0; i<categoryList.length; i++)
            {
                if (categorySubjectsHashMap.containsKey(categoryList[i]))
                {
                    ArrayList<String> subjectsOfCategory = categorySubjectsHashMap.get(categoryList[i]);
                    for (int j=0; j<subjectsOfCategory.size(); j++)
                    {
                        if (!pourDoublons.contains(subjectsOfCategory.get(j)))
                        {
                            subjectsToShow += subjectsOfCategory.get(j)+",";
                            pourDoublons.add(subjectsOfCategory.get(j));
                        }
                    }
                }
            }
            categoryList = null;
            pourDoublons = null;
            response.setContentType("text/plain");  
            response.setCharacterEncoding("UTF-8");
            response.getWriter().write(subjectsToShow.substring(0,subjectsToShow.length()-1));
        }
        else
        {
            response.setContentType("text/plain");  
            response.setCharacterEncoding("UTF-8");
            response.getWriter().write("");
        }

パラメータが null として検出されないのはなぜですか? 私も .equals(null) とそのような多くのものを試しましたが、何もうまくいきませんでした! :(

前もって感謝します。

4

2 に答える 2

0

は、パラメータがまったく送信されていない場合にrequest.getParameter(name)のみ返されます。パラメータが送信されるとnull空の文字列が返されますが、値はありません。これにより、送信されたパラメータと送信されていないパラメータを簡単に区別できます。

空かどうかもチェックしたい場合は、基本的にString#isEmpty()check を使用する必要があります。

だから、あなたは交換する必要があります

if (request.getParameter("selectedSubjectCategories")!=null)

String selectedSubjectCategories = request.getParameter("selectedSubjectCategories");

if (selectedSubjectCategories != null && !selectedSubjectCategories.isEmpty())

または多分

if (selectedSubjectCategories != null && !selectedSubjectCategories.trim().isEmpty())

string != ""charlieftl のコメントで提案されているチェックは、空の文字列をチェックする正しい方法ではないことに注意してください。(!=および==) は、値ではなく参照によってオブジェクトを比較します。

于 2012-12-10T13:24:50.737 に答える
-1
if (request.getParameter("selectedSubjectCategories")!='')

うまくいきました。:)

于 2012-12-15T13:53:40.783 に答える