我使用以下代码处理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>");
}
}
问题是,在按下提交按钮之前,所选复选框的值将显示在屏幕上。但是,按下按钮提交时,这些值消失了。请帮忙吗?!
答案 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>
),但这应该让您了解必须是什么完成。