HTML按钮事件和选中的复选框

时间:2013-05-01 16:38:25

标签: java jsp

我使用以下代码处理html按钮事件:

if(request.getParameter("btnSubmit")!=null)

我使用以下代码捕获所有具有相同名称(“选项”)的复选框:

String[] selecttype = request.getParameterValues("choices");

if (selecttype != null && selecttype.length != 0) 
{
    for (int i = 0; i < selecttype.length; i++) 
    { 
    out.println("<h4><font color = 'red'>" + selecttype[i] + "</font></h4>");
      }
}

问题是,在按下提交按钮之前,所选复选框的值将显示在屏幕上。但是,按下按钮提交时,这些值消失了。请帮忙吗?!

1 个答案:

答案 0 :(得分:0)

您需要某种逻辑来根据捕获的选项在复选框中设置checked属性(即勾选先前选中的复选框)。我建议你将表单提交给负责处理捕获的选择的中间Servlet,将它们存储到比String数组更合适的数据结构中并将请求转发回jsp页面,这也会使业务逻辑与视图。

无论如何,如果你真的需要在没有中间Servlet的情况下重新提交到同一页面,这里有一种处理checked属性的懒惰方法:

<%
   // Put this scriptet before your checkboxes
   String[] choiceArray = request.getParameterValues("choices");
   // avoids NPEs
   Set<String> capturedChoices = new HashSet<String>();
   if (choiceArray != null) {
       capturedChoices = new HashSet<String>(Arrays.asList(choiceArray));      
   }
%>

在您的复选框呈现代码中:

<input type="checkbox" name="choices" value="choice1" 
  <%= capturedChoices.contains("choice1") ? "checked=\"checked\"" : "" %> /> 

<input type="checkbox" name="choices" value="choice2" 
  <%= capturedChoices.contains("choice2") ? "checked=\"checked\"" : "" %> /> 

<!-- And so on (replace `choice1`, `choice2`, etc with actual values). -->

当然,有更合适的数据结构来保存所捕获的选项而不是Set<String>(例如,boolean[]Map<String, Boolean>),但这应该让您了解必须是什么完成。