从 Servlet 获取复选框值

Posted

技术标签:

【中文标题】从 Servlet 获取复选框值【英文标题】:Getting checkbox value(s) from a Servlet 【发布时间】:2012-05-26 09:37:07 【问题描述】:

我有一个带有 mysql 数据库的 servlet。它看起来像这样:

这是它的一段代码:

out.println("<table id = \"main_section\" cellspacing=\"1\" bgcolor=\"red\" > ");
out.println ("<tr> ");
out.println("<td >NUMBER</td>");
out.println("<td >PAYMENT</td>");
out.println("<td >RECEIVER</td>");
out.println("<td >VALUE </td>");
out.println("<td >CHECKBOX</td>");
out.println("</tr>");
out.println("<tr>");
for (int i = 0; i < ex.getExpenses().size(); i++) 
    out.println("<td > " + ex.getExpenses().get(i) + "</td>");

    if (i>0 && (i+1)%4==0) 
        out.println("<td><input type=\"checkbox\" name=\"checkbox\"></td>");
        out.println("</tr><tr>");

         

out.println("</tr>");

我需要做的是创建一个提交按钮,用于计算复选框的 VALUE 总和。例如,如果选中了 NUMBER 1 和 2,则提交按钮应给出 5577.0 (VALUE 22.0+5555.0) 的结果。 任何人都可以帮我吗?

【问题讨论】:

我尝试将复选框的值指定为 VALUE 的值:double value = Double.parseDouble(request.getParameter("VALUE")); out.println("&lt;td&gt;&lt;input type=\"checkbox\" name=\"checkboxname\" value = \"" + value +" \"&gt;&lt;/td&gt;");,然后通过类似:request.getParameterValues("checkboxname") 的方式获取结果。但它没有用:( 【参考方案1】:

首先,您应该了解 JSP 并从 JSP 而不是从 servlet 生成 html 标记。

现在解决您的问题。这些行中的每一行都来自一个数据库表。所以这些行中的每一行都应该有一个 ID(主键)。将行的 ID 分配给复选框的值。当您提交表单时,servlet 将收到选中复选框的所有 ID。从数据库中获取这些 ID 对应的值,并将它们相加(或执行一个直接计算总和的查询):

<input type="checkbox" name="checkedRows" value="$idOfCurrentRow">

在处理表单提交的servlet中:

String[] checkedIds = request.getParameterValues("checkedRows");

【讨论】:

【参考方案2】:

你可以得到它

String[] values = req.getParameterValues("checkbox");

【讨论】:

然后呢?你怎么能得到行值,使用神秘的魔法或类似的东西? 可以通过从数组中获取值来获取。 如何使用此代码区分数组中选中的复选框和未选中的复选框?您可以检查其他答案以了解重点:) 您只需通过String [] 放置日志或某种东西来管理。 不要争论,无论如何我都必须使用 Servlet,所以 JSP 不是出路:)【参考方案3】:

改变这一行:

out.println("<td><input type=\"checkbox\" name=\"checkbox\"></td>");

阅读:

out.println("<td><input type=\"checkbox\" name=\"selected\" value=\""+ex.getExpenses().get(i-1)+"\"></td>");

这将创建复选框,您可以通过值标签来识别它们。我希望“数字”字段是主键之类的。

然后在下一次运行。您可以通过以下方式获取所有检查值:

String[] selected = request.getParameters("selected");

现在,您可以将数字相加。我不太明白您的费用清单从代码中的样子。这只是一个不起作用的插图,但可以为您提供如何做的想法:

int sum = 0;
for (int i = 0; i < ex.getExpenses().size(); i++)
  for(int selectedIndex = 0; selectedIndex < selected.length; ++selectedIndex)
    if (ex.getExpenses().get(i) == Integer.parseInt(selected[selectedIndex]))
      sum += ex.getExpenses().get(i-1);

【讨论】:

我已经尝试过这样的事情(我在上面的评论中写了它)但我面临的问题是我将我的 getExpenses.get(i) 存储为对象,每当我说到点子上时: if (ex.getExpenses().get(i) == Integer.parseInt(selected[selectedIndex])) 由于操作数类型 Object 和 int 不兼容,它不会编译。添加演员表没有帮助。然后我如何将它全部传递给提交按钮,以便我给出总和结果?提前致谢。 好的,现在我已将 getExpenses 从 Object 类型更改为 String 并执行以下操作:` if (Integer.parseInt( ex.getExpenses().get(j)) == Integer.parseInt( selected[selectedIndex])) sum += Integer.parseInt( ex.getExpenses().get(j-1));` 但是我如何将总和传递给提交按钮? 我创建了一个带有提交按钮的表单,其中包含对 Servlet 的操作,其中我有对选定框求和的代码。每当我选择并按下提交时,它都会在 `for(int selectedIndex = 0; selectedIndex 处引发 NullPointerExcetion @Gibsy:如果没有选中任何复选框(第一次加载页面时就是这种情况),则可能会出现空指针异常。围绕上面的循环是一个if (selected != null) 这就是我所做的(在你的帮助下:)):Dao ex = ExpensesDao.getDao(); String[] selected = request.getParameterValues("selected"); int sum = 0; for (int j = 0; j &lt; ex.getExpenses().size(); j++) if (selected !=null) for(int selectedIndex = 0; selectedIndex &lt; selected.length; ++selectedIndex) if (Integer.parseInt(ex.getExpenses().get(j)) == Integer.parseInt(selected[selectedIndex])) sum += Integer.parseInt( ex.getExpenses().get(j-1)); out.println(sum);

以上是关于从 Servlet 获取复选框值的主要内容,如果未能解决你的问题,请参考以下文章

点击超链接时跳转到一个servlet,怎样在servlet中获得checkbox的值

为什么来自Checkboxes的字符串值在java中增加了+1?

无法从复选框中获取值

Servlet之获取前端的数据

从复选框中获取所有值? [复制]

如何从复选框列表中获取最新的选定值?