2016-04-10 82 views
0

因此,我正在處理多個選擇問題的入口頁,我想用ajax完全處理它。我想用問題的選項數量來靈活處理。
這裏的jQuery的一部分:使用ajax發送javascript數組到jsp

$("#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}, 

      }); 
}); 

我想發送的選項陣列JSP頁面「ModifyQueston.jsp」。

這裏的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頁面中的數組。當我嘗試讀取Options數組的長度或當我嘗試通過提供索引來讀取值時,我得到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發送多個值。從控制器端(對於Spring框架),只需將它保存在一個字符串中即可。數據將使用逗號分隔值進行綁定。要做到這一點,你需要一個從JavaScript結束的數組,我的意思是你的JSP端。

的複選框,您可以使用:

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

從控制器端就可以得到價值:

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

正如你可以下拉(選項)做相同的方式。
在使用spring框架時,這對我有用。
謝謝。

+0

嘿..感謝您的答覆.. 但是,正如我在問題的最後一部分寫道,我真的不希望使用這種方式。分割字符串的問題是,如果發送的字符串或數組中已經包含逗號(,),那麼它也會將字符串與它分開。 –

+0

所以我認爲如果你想發送一些包含逗號的值,那麼你可以添加任何特殊的字符到該值。比如說如果你找到了逗號(,),你可以替換它(#)或其他東西。爲了從控制器端獲得真正的價值,你必須用逗號代替(#)它。這可能是一種方式。 –

0

好的,經過幾個星期的研究,我發現了一種將數組從js發送到jsp的方法。以前的代碼只需要一點修改。 以下是需要修改的js部分。我只需在數據部分添加括號,如數組。

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

     }); 

請注意,我將Options寫爲「Options []」。這使得jsp明白正在發送的變量是一個數組。

現在,jsp頁面並不需要太多修改。

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

任何進一步的操作都可以作爲普通字符串執行。

所以,是的,這爲我工作!..

相關問題