2016-04-10 17 views
0

私は複数の選択肢の質問ページに取り組んでいます。私はそれを完全にajaxで扱いたいと思っています。私は、問題の選択肢の数に柔軟に対応したいと思っています。私は、jspページ「ModifyQueston.jsp」にオプション配列を送信したいajaxを使ってjspにjavascript配列を送る

$("#QuestionModPageSubmitButton").click(function(){ 
     var QuesDesc=$("#QuesDesc").val(); 
     var Options=[]; 
     var QuestionId=$("#QuestionId").attr("data-id"); 
     var CorrectOption=$('input[type="radio"]:checked').val(); 
     var TotalOptions=$("#TotalOptions").attr("data-total"); 
     var SubjectId=$("#SubjectId").attr("data-id"); 

     for(var i=0;i<TotalOptions;i++) 
     { 
      Options.push($("#Option"+i).val()); 
     } 


     $.ajax({ 
     type:"POST", 
     url:"ajax/ModifyQuestion.jsp", 
     data:{ 
       Subject:SubjectId, 
       QID:QuestionId, 
       Question:QuesDesc, 
       OptionValues:Options, 
       Correct:CorrectOption, 
       TotalOptions:TotalOptions}, 

      }); 
}); 


はここでjqueryの一部です。

ここで私が送信されたデータの読み込みに使用するJSPコードです:

int SubjectId=Integer.parseInt(request.getParameter("Subject")); 
int QuestionId=Integer.parseInt(request.getParameter("QID")); 
String Question=request.getParameter("Question"); 
String[] Options=request.getParameterValues("OptionValues"); 
int CorrectOption=Integer.parseInt(request.getParameter("Correct")); 
int TotalOptions=Integer.parseInt(request.getParameter("TotalOptions")); 

しかし、私はJSPページ内の配列を読み取ることができないんだけど、これらのコードでは。私は、オプション配列の長さを読み込もうとしたとき、またはインデックスを提供して値を読み込もうとするときに、NullPointerExceptionを取得します。
jspにデータを送信するスクリプトの部分はうまくいきます。だから問題はJSPページにどうやって入れるのかということです。
配列を ' - 'で区切って一つの文字列に変換し、getParameter()関数を使って読み込み、split()関数を使って配列に戻してみました。

スクリプト:

var OptionsString=""; 
for(var i=0;i<TotalOptions;i++) 
{ 
    Options.push($("#Option"+i).val()); 
    OptionsString+=(Options[i]+((i<TotalOptions-1)?" - ":" ")); 
} 

JSP:

String[] Options=(request.getParameter("OptionValues")).split("-"); 

それは正常に動作します。しかし、私はこのようにしたくありません。オプションのいずれかに既に ' - 'が含まれていると、コードがクラッシュするからです。

これを行うにはどうすればよいですか?

答えて

0

ajaxで複数の値を送信できます。コントローラの終わり(春のフレームワークの場合)から、文字列で保存するだけです。データはコンマ区切りの値でバインドされます。それを行うには、javascriptの最後から配列が必要です。私はあなたのJSP側です。

チェックボックスのためにあなたが使用することができます。

var idVal = []; 
var i = 0; 
$('.case:checked').each(function() { 
    idVal[i] = $(this).val(); 
    i++; 
}); 

をコントローラ側からは、値を取得することができます

String[] id = req.getParameter("id_").split(","); 

をドロップダウン(オプション)のためにこれを行うことができます同じようにあります。
スプリングフレームワークを使用している場合、これは私のために働いています。
ありがとうございます。

+0

...!私のために返事をありがとう働いていた。しかし、私は質問の最後の部分に書いたように、私は本当にそれをこのように使用したくありません。文字列を分割する際の問題は、送信された文字列または配列にカンマ(、)がすでに含まれている場合は、その文字列も分割することです。 –

+0

だから私はあなたがコンマを含むいくつかの値を送信する場合は、その値に任意の特殊な文字を追加することができますと思います。あなたがカンマ(、)を見つけたら、それを置き換えることができます(#)か他のものです。コントローラー側から実際の価値を得るためには、コンマで置き換える必要があります(#)。それは方法かもしれない。 –

0

さて、数週間の研究の後、私はjsからjspに配列を送る方法を見つけました。前のコードはちょっとした変更が必要でした。 ここに、変更が必要なjs部分があります。データセクションの配列のように角かっこを追加するだけでした。

 $.ajax({ 
    type:"POST", 
    url:"ajax/ModifyQuestion.jsp", 
    data:{ 
      Subject:SubjectId, 
      QID:QuestionId, 
      Question:QuesDesc, 
      Correct:CorrectOption, 
      "Options[]":Options 
     }, 

     }); 

「オプション[]」としてオプションを書いたことに注目してください。これは、送信される変数が配列であることをJSPに理解させます。

jspページでは、実際にあまり変更する必要はありませんでした。

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

これ以上の操作は、通常の文字列として実行できます。

だから、ええ、それは ..ねえ

関連する問題