1

Not sure the best way to do this...

I have an HTML FORM with multiple rows.. But one of the columns also has multiple values.

I know I can receive the event into a String array with getParamaterValues(). But for the variable days, how do I get that into an array of arrays so it's still related to the event column?

It's all coming out of a database so I can't just hard code it.

I'm sure I actually know the answer but my brain is not cooperating... Thanks in advance for the kick-start... I'm using Java servlets. But it's really just an HTML question.

e.g.

<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">
2
  • Don't know about java but in PHP you would add square brackets after the checkbox name to make an array name="days[]" Commented Nov 24, 2014 at 22:37
  • @Billy, You don't need that in Java, and it still doesn't help with how to make a 2 dimensional array. Commented Nov 24, 2014 at 23:12

2 Answers 2

1

Append the value from the events to the name attribute of the days like ev1_days, ev2_days, ev3_days:

<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>
...
...

Then you can do something like:

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

You should actually close your td's and tr's by the way.

Sign up to request clarification or add additional context in comments.

2 Comments

That's sort of the hack I did initially. But I was thinking there must be a more elegant way? like an array in each element of the array? i.e. looking for event[0]:ev1 days[0]:[Mon,Tue] etc
@PrecisionPete, If you build it yourself with something like that, sure. But there's nothing to do it automatically in Java, unless some fancy framework has something.
0

You will have to change name of Checkboxes that belongs to the same event to a unique name.

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">

Script

    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()+']]}'

    }

Passing data to 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
        },


    });

Receiving Data in Servlet Using 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("]");
}  

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.