使用servlet中数组的多个参数

时间:2011-05-11 18:45:18

标签: java servlets

以下是我的.jsp页面中的HTML:

<tr>
  <td><input type="checkbox" name=<%=editID%>COM /> </td>    
  <td>blah blah</td>
  <td>blah blah</td>
</tr>

所以在这里用户将选择复选框并提交它们以便删除。但我希望他们能够选择多个复选框。例如,如果他们选择了两个复选框,比如#5和6,它将作为5COM和6COM进入servlet(这是由于糟糕的表设计)。接下来,我试图从我的jsp页面获取多个参数,并将它们写入我的servlet中的数据库。以下是我的定义:

  String[] comEdit = request.getParameterValues("editIDCom");   
  String comEditDel = "";
  int[] comEditDels = null;

所以使用上面的例子,comEdit数组应该包含5COM和6COM ....接下来,我试图获取数组'comEdit'中每个项的子串,然后我试图将它放入int数组:

  for (int i = 0; i < comEdit.length; ++i) {
      String com = comEdit[i];
      comEditDel = com.substring(0, com.length() - 3);    
      comEditDels = new int[comEditDel == null ? 0: comEditDel.length];
      comEditDels[i] = Integer.parseInt(comEditDel[i]);
  }

所以坚持使用相同的例子,我试图创建一个新的int数组,它会给我[5,6] ....现在上面的部分很可能不正确,但是我给了它一个镜头,而你可以看出我的意图。在这里,我试图在我的可调用语句中使用该数组:

    CallableStatement stmt = null;
    PreparedStatement pstmt = null;
    Connection conn = null;
    ArrayDescriptor ad = null;
    String dSource = getServletContext().getInitParameter("dataSource");

   stmt = conn.prepareCall("{?= call My_function(?)}");
   stmt.registerOutParameter(1, Types.INTEGER);
   ad = ArrayDescriptor.createDescriptor("NUM_ARRAY", conn);
   stmt.setArray(2,new ARRAY(ad, conn, comeditDels));

再次,使用该示例,stmt.setArray函数应将数组[5,6]发送到My_function。这是我的尝试,这是不正确的?任何帮助表示赞赏。谢谢!

1 个答案:

答案 0 :(得分:2)

根据您对我的评论的回复,这样做是否符合要求?

String[] comEdit = request.getParameterValues("editIDCom");   
int[] comEditDels = null;

if (comEdit != null) {
    comEditDels = new int[comEdit.length];

    for (int i = 0; i < comEdit.length; ++i) {
        String com = comEdit[i];
        if (com != null && com.length() - 3 > 0) {
            try {
                comEditDels[i] = Integer.parseInt(com.substring(0, com.length() - 3));
            } catch (NumberFormatException exception) {
                // do something or possibly ignore since the value isn't a valid integer
            }
        }
    }
}

if (comEditDels != null) {
    CallableStatement stmt = null;
    PreparedStatement pstmt = null;
    Connection conn = null;
    ArrayDescriptor ad = null;
    String dSource = getServletContext().getInitParameter("dataSource");

    stmt = conn.prepareCall("{?= call My_function(?,?,?,?)}");
    stmt.registerOutParameter(1, Types.INTEGER);
    ad = ArrayDescriptor.createDescriptor("NUM_ARRAY", conn);
    stmt.setArray(2,new ARRAY(ad, conn, comEditDels));
}

我不熟悉那些Oracle对象,所以我不确定通过这种方式传递“comEditDels”会有什么期望,但我认为这就是你想要的?