2016-04-10 85 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[]"); 

任何进一步的操作都可以作为普通字符串执行。

所以,是的,这为我工作!..

相关问题