2014-11-24 34 views
1

不确定最佳的方式来做到这一点...输入具有多个值的多个值

我有一个HTML表单与多行..但其中一列也有多个值。

我知道我可以收到event成一个字符串数组与getParamaterValues()。但是对于变量days,我如何将它转换为数组的数组,以便它仍然与事件列相关?

这一切都来自数据库,所以我不能只是硬编码它。

我确定我确实知道答案,但我的大脑不合作......先谢谢了启动...我使用Java servlets。但它实际上只是一个HTML问题。

例如

<tr> 
    <td> 
     <input type="checkbox" name="event" value="ev1"> 
    <td> 
     <input type="checkbox" name="days" value="Sat"> 
     <input type="checkbox" name="days" value="Sun"> 
<tr> 
    <td> 
     <input type="checkbox" name="event" value="ev2"> 
    <td> 
     <input type="checkbox" name="days" value="Fri"> 
     <input type="checkbox" name="days" value="Sat"> 
     <input type="checkbox" name="days" value="Sun"> 
<tr> 
    <td> 
     <input type="checkbox" name="event" value="ev3"> 
    <td> 
     <input type="checkbox" name="days" value="Sat"> 
     <input type="checkbox" name="days" value="Sun"> 
     <input type="checkbox" name="days" value="Mon"> 
+0

不知道Java,但在PHP中,你会复选框名称后加括号,使数组名=“天[]” – Billy 2014-11-24 22:37:10

+0

@Billy在Java中你不需要它,它对于如何创建二维数组仍然没有帮助。 – developerwjk 2014-11-24 23:12:15

回答

1

从事件的价值附加到像ev1_days,ev2_days,ev3_days天的name属性:

<tr> 
    <td> 
     <input type="checkbox" name="event" value="ev1"> 
    </td> 
    <td> 
     <input type="checkbox" name="ev1_days" value="Sat"> 
     <input type="checkbox" name="ev1_days" value="Sun"> 
    </td> 
</tr> 
... 
... 

然后,你可以这样做:

String[] events = request.getParamaterValues("event"); 
for(int i=0; i<events.length; i++) 
{ 
    String[] days = request.getParamaterValues(events[i] + "_days"); 
    //do something with days.... 
} 

你应该顺便关闭你的td和tr's。

+0

这就是我最初做的破解。但我认为必须有更优雅的方式?像数组中的每个元素中的数组?即寻找事件[0]:ev1 days [0]:[Mon,Tue]等 – PrecisionPete 2014-11-24 23:24:59

+0

@PrecisionPete,如果你自己用类似的东西来构建它,当然。但是在Java中没有任何事情可以自动完成,除非一些花哨的框架有某些东西。 – developerwjk 2014-11-24 23:26:23

0

您必须将属于同一事件的复选框的名称更改为唯一名称。

HTML

<tr> 
    <td> 
     <input type="checkbox" name="event" value="ev1"> 
    <td> 
     <input type="checkbox" name="daysA" value="Sat"> 
     <input type="checkbox" name="daysA" value="Sun"> 
<tr> 
    <td> 
     <input type="checkbox" name="event" value="ev2"> 
    <td> 
     <input type="checkbox" name="daysB" value="Fri"> 
     <input type="checkbox" name="daysB" value="Sat"> 
     <input type="checkbox" name="daysB" value="Sun"> 
<tr> 
    <td> 
     <input type="checkbox" name="event" value="ev3"> 
    <td> 
     <input type="checkbox" name="daysC" value="Sat"> 
     <input type="checkbox" name="daysC" value="Sun"> 
     <input type="checkbox" name="daysC" value="Mon"> 

脚本

var events = []; 
    var daysA = []; 
    var daysB = []; 
    var daysC = []; 
    var jsonData=""; 

    function c(){ 
    var eventCB = document.getElementsByName("event"); 
    var daysACB = document.getElementsByName("daysA"); 
    var daysBCB = document.getElementsByName("daysB"); 
    var daysCCB = document.getElementsByName("daysC"); 

    for(var i=0;i<eventCB.length;++i){ 
     events.push(eventCB[i].value); 
    } 

    for(var i=0;i<daysACB.length;++i){ 
     daysA.push(daysACB[i].value); 
    } 

    for(var i=0;i<daysBCB.length;++i){ 
     daysB.push(daysBCB[i].value); 
    } 

    for(var i=0;i<daysCCB.length;++i){ 
     daysC.push(daysCCB[i].value); 
    } 


    jsonData ='{events:['+events.toString()+'],days:[['+daysA.toString()+'],['+daysB.toString()+'],['+daysC.toString()+']]}' 

    } 

将数据传递到Servlet的

var jsonComplete = JSON.stringify(jsonData);//You will get below string 
//{events:[ev1,ev2,ev3],days:[[Sat,Sun],[Fri,Sat,Sun],[Sat,Sun,Mon]]} 
$.ajax({ 
     url:"URLServlet", 
     type:"POST", 
     dataType:'json', 
     data: {jsonComplete : jsonComplete }, 
     success:function(data){ 
      // do whatever required 
     }, 


    }); 

在Servlet的接收数据使用org.json

JSONObject objJSON = new JSONObject(request.getParameter("jsonComplete ")); 
JSONArray arrEvents = objJSON.getJSONArray("events"); 
JSONArray arrDays = objJSON.getJSONArray("days"); 

for(int i=0;i<arrEvents.length();++i){ 
    out.println("event["+i+"]:"+arrEvents.getString(i));//Similar to event[0]:ev1 
} 

for(int i=0;i<arrDays.length();++i){ 
    JSONArray arrDaystemp = arrDays.getJSONArray(i); 
    out.println("days["+i+"]:["); 
    for(int i=0;i<arrDaystemp.length();++i){ 
     out.println(arrDaystemp.getString(i));//Similar to days[0]:[Mon,Tue] 
    } 
    out.println("]"); 
}