我要做的是学校的作业,新闻管理系统,问题时修改复选框的中的文章分类,明明取消了选择还能在下个界面中的getParameterValues拿到。
有个界面是修改新闻的,名字newsDetailUpdateSimple.jsp,代码如下:
<body>
<% //下面获取文章原本信息
String url = "";
boolean flag = false;
News news = null;
String title = "";
String author = request.getParameter("name");
String summary = "";
String content = "";
String sid = request.getParameter("id"); 

List<String> categories = new ArrayList<String>();
String category1="", category2="", category3="";

if(sid != null){
int id = Integer.parseInt(sid);
NewsService newsService = new NewsServiceImpl();
news = newsService.getNewsById(id);
title = news.getTitle();
author = news.getAuthor();
summary = news.getSummary();
content = news.getContent();

NewsCategoryService newsCategoryService = new NewsCategoryServiceImpl();
categories = newsCategoryService.getCategoryByNewsId(id);

if(categories.size()>0){
category1 = categories.get(0);
if(categories.size()>1){
category2 = categories.get(1);
if(categories.size()>2){
category3 = categories.get(2);
}
}
}

url = "doUpdate.jsp";
flag = true;
}
%>
<form name ="dataFrm" id="dataFrm" action="<%=url %>?id=<%=sid %>" method="post" >
<table  width="100%" border="0" cellspacing="5" cellpadding="0">
<thead>
<tr><td align="center" colspan="2" class="text_tabledetail2"><h4>修改资讯</h4></td></tr>
</thead>
<tbody>
<tr>
<td style="text-align:right;" class="text_tabledetail2">分类</td>
<td class="cate_label">
         <label><input type="checkbox" name="category" value="搞笑" onclick="changeColor(0)"/>搞笑</label> |
         <label><input type="checkbox" name="category" value="校园" onclick="changeColor(1)"/>校园</label> |
         <label><input type="checkbox" name="category" value="运动" onclick="changeColor(2)"/>运动</label> |
         <label><input type="checkbox" name="category" value="竞技" onclick="changeColor(3)"/>竞技</label> |
         <label><input type="checkbox" name="category" value="幻想" onclick="changeColor(4)"/>幻想</label> |
         <label><input type="checkbox" name="category" value="科幻" onclick="changeColor(5)"/>科幻</label> |
         <label><input type="checkbox" name="category" value="剧情" onclick="changeColor(6)"/>剧情</label> |
         <label><input type="checkbox" name="category" value="异世界" onclick="changeColor(7)"/>异世界</label> |
         <label><input type="checkbox" name="category" value="恋爱" onclick="changeColor(8)"/>恋爱</label> |
         <label><input type="checkbox" name="category" value="催泪" onclick="changeColor(9)"/>催泪</label> |
         <label><input type="checkbox" name="category" value="治愈" onclick="changeColor(10)"/>治愈</label> |
         <label><input type="checkbox" name="category" value="致郁" onclick="changeColor(11)"/>致郁</label> |
         <label><input type="checkbox" name="category" value="冒险" onclick="changeColor(12)"/>冒险</label> |
         <label><input type="checkbox" name="category" value="热血" onclick="changeColor(13)"/>热血</label> |
         <label><input type="checkbox" name="category" value="机战" onclick="changeColor(14)"/>机战</label> |
         <label><input type="checkbox" name="category" value="动作" onclick="changeColor(15)"/>动作</label> |
         <i id="msg" style="margin-left:10px"></i>
</td>
</tr>
<tr>
<td style="text-align:right;" class="text_tabledetail2">标题</td>
<td style="text-align:left;"><input type="text" name="title" value="<%=title %>"/></td>
</tr>
<tr>
<td style="text-align:right;" class="text_tabledetail2">作者</td>
<td style="text-align:left;"><input type="text" name="author" value="<%=author %>" readonly="true"/></td>
</tr>

<tr>
<td style="text-align:right;" class="text_tabledetail2">摘要</td>
<td style="text-align:left;"><textarea id="summary" name="summary" rows="2" cols="30"><%=summary %></textarea></td>
</tr>
<tr>
<td style="text-align:right;" class="text_tabledetail2">内容</td>
<td style="text-align:left;">
<div id="xToolbar"></div>
<textarea id="newscontent" name="newscontent" class="ckeditor" rows="10" cols="50"><%=content %></textarea></td>
</tr>
<tr>
<td style="text-align:right;" class="text_tabledetail2">上传图片 </td>
<td style="text-align:left;"><input type="file" name="picPath" value=""/></td>
</tr>
<tr>
<td style="text-align:right;" colspan="2">
<button type="submit" class="page-btn2" name="save">保存</button>
<button type="button" class="page-btn2" name="return" onclick="javascript:location.href='newsDetailList.jsp'">返回</button>
</td>
</tr>
</tbody>
</table>
</form>
<%
Object omess = request.getAttribute("mess");
if(omess != null){
out.println(omess.toString());
}
 %>
 <script>
 
  var cnt = 0;//记录选择的分类个数,最多选三个
  var labels = document.getElementsByTagName("label");
var category = document.getElementsByName("category");

  window.onload = function(){
  var category1="<%=category1%>";
  var category2="<%=category2%>";
  var category3="<%=category3%>";
  var categories = [category1,category2,category3];
  //console.log("category.length:"+category.length);
  for(var i=0;i<category.length;i++){
  var j;
  for(j=0;j<3;j++){
  if(category[i].value == categories[j]){
  //console.log("该文章最初分类有"+category[i].value);
  labels[i].checked=true;
  //console.log(category[i].value+labels[i].checked);
  //console.log("labels"+i+":"+labels[i].checked);
  labels[i].style.backgroundColor="RGB(244,158,227)";
labels[i].style.color="white";
cnt++;
//console.log(cnt);
if(cnt>=3){//选择三个分类后禁用其他选项
for(var i=0;i<labels.length;i++){
if(!labels[i].checked){
labels[i].disable=true;
}
}
  showMsg();
  }
  }
  break;
  }
  if(j==3){labels[i].checked=false;}
  }
  };
 
  function showMsg(){
 
msg.innerHTML = "最多选择三个分类";
msg.style.color = "red";
msg.style.fontSize = "16px";
  }
 
function changeColor(i){
var msg = document.getElementById("msg");
if(labels[i].checked){
labels[i].checked=false;
//console.log(category[i].value+labels[i].checked);
labels[i].style.backgroundColor="";
labels[i].style.color="";
//console.log("点击了"+category[i].value);
cnt--;
//console.log(cnt);
if(cnt<3){
for(var i=0;i<labels.length;i++){
if(!labels[i].checked){
labels[i].disable=false;
//console.log("分类"+(i+1)+"被启用");
}
}
msg.innerHTML = "";
}
}else{
if(labels[i].disable) return;

labels[i].checked=true;
//console.log(category[i].value+labels[i].checked);
labels[i].style.backgroundColor="RGB(244,158,227)";
labels[i].style.color="white";

cnt++;
console.log("2:"+cnt);
if(cnt>=3){
for(var i=0;i<labels.length;i++){
if(!labels[i].checked){
labels[i].disable=true;
//console.log("分类"+(i+1)+"被禁用");
}
}
showMsg();
}
}
}

var submit = document.getElementsByName("save")[0];
submit.onclick = function(){
var num=0;
//for(i=0;i<16;i++){num++; console.log(category[i].value+labels[i].checked);}
var flag = false;
for(var i=0;i<labels.length;i++){
if(labels[i].checked){
flag = true;
break;
}
}

if(!flag) {alert("至少选择一个分类!"); return false;}
};
</script>
</body>
</html>下面这个是处理更新的页面,   doUpdate.jsp:
 <body>
    <%
    request.setCharacterEncoding("utf-8");
    
  Object oid = request.getParameter("id");
  if(oid != null){
  int id = Integer.parseInt(oid.toString());
  NewsDao newsdao = new NewsDaoImpl();
  News news = newsdao.getNewsById(id);
  out.print(id+"\t"+news.getId()+"\t"+news.getTitle());
  boolean flag1=false, flag2=false;
    
     String[] categories = request.getParameterValues("category");
    
     for(int i=0;i<categories.length;i++)
     System.out.println(i+categories[i]);
     String title = request.getParameter("title");
     String author = request.getParameter("author");
     String summary = request.getParameter("summary");
     String content = request.getParameter("newscontent");
    
     if(title!="" && author!="" && summary!="" && content!=""){
     news.setTitle(title);
     news.setAuthor(author);
     news.setSummary(summary);
     news.setContent(content);
     news.setModifyDate(new Date());
    
    
     NewsService newsService = new NewsServiceImpl();
     flag1 = newsService.updateNews(news);
    
     NewsCategoryService newsCategoryService = new NewsCategoryServiceImpl();
     flag2 = newsCategoryService.deleteNewsCategory(id);
    
     for(int i=0;i<categories.length;i++){
     NewsCategory newsCategory = new NewsCategory();
     newsCategory.setNewsId(id);
     newsCategory.setCategoryName(categories[i]);
     newsCategory.setCreateDate(new Date());
    
     flag2 = newsCategoryService.addNewsCategory(newsCategory);
     //System.out.println(categories[i]+flag2);
     if(!flag2) break;
     }
    
     if(flag1 && flag2){
     response.sendRedirect(request.getContextPath()+"/index/newsDetailList.jsp");
     }else{
     request.setAttribute("mess", "修改失败!");
     request.getRequestDispatcher("/index/newsDetailCreateSimple.jsp").forward(request, response);
     }
     }
    
  NewsService newsService = new NewsServiceImpl();
  newsService.updateNews(news);
  }else{out.println("no param");}
  %>
  <body>

解决方案 »

  1.   

    我也算是小白了,在自学中
    不过你这个复选框应该不是直接get获取值吧
    不过代码太长了,我没仔细看
      

  2.   

    虽然不是单步调试,但变量我基本是一步步输出了,上个界面结束时得到所有checked为true的复选项正式我选择的,下个页面getParameterValues获得的不是那回事。。
      

  3.   

    我想问下getParameterValues不是只接收选中的值吗?我提交时选中的几个输出出来是正确的,收到才出的错,需要另外把值放在隐藏域啊