从 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("<td><input type=\"checkbox\" name=\"checkboxname\" value = \"" + value +" \"></td>");
,然后通过类似: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 < ex.getExpenses().size(); j++) if (selected !=null) for(int selectedIndex = 0; selectedIndex < 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的值