【问题标题】:INPUT with multiple values of multiple values eachINPUT 具有多个值的多个值,每个值具有多个值
【发布时间】:2015-01-22 18:56:24
【问题描述】:

不确定最好的方法...

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

我知道我可以将event 接收到带有getParamaterValues() 的字符串数组中。但是对于变量days,如何将其放入数组数组中,使其仍与事件列相关?

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

我确定我确实知道答案,但我的大脑不合作...提前感谢您的启动...我正在使用 Java servlet。但这实际上只是一个 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">

【问题讨论】:

  • 不了解 java 但在 PHP 中,您会在复选框名称后添加方括号以创建数组 name="days[]"
  • @Billy,在 Java 中你不需要它,它仍然对如何制作二维数组没有帮助。

标签: java html servlets


【解决方案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。

【讨论】:

  • 这就是我最初所做的黑客行为。但我在想一定有更优雅的方式吗?像数组的每个元素中的一个数组?即寻找 event[0]:ev1 days[0]:[Mon,Tue] 等
  • @PrecisionPete,如果你用类似的东西自己构建它,当然可以。但是在 Java 中没有什么可以自动完成,除非一些花哨的框架有什么东西。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2019-06-13
    相关资源
    最近更新 更多