INPUT具有多个值的多个值

时间:2014-11-24 22:31:32

标签: java html servlets

不确定最佳方法......

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

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

它全部来自数据库所以我不能只是硬编码。

我确信我确实知道答案,但我的大脑没有合作......提前感谢启动......我正在使用Java servlet。但它实际上只是一个HTML问题。

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 个答案:

答案 0 :(得分:1)

将事件中的值附加到日期的名称属性,例如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>
...
...

然后你可以做类似的事情:

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。&lt; p&gt;

答案 1 :(得分:0)

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

<强> 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("]");
}