2014-11-24 64 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("]"); 
}