`
wangchao_17915566
  • 浏览: 169878 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

DWR2.0中checkbox的value值问题(意外收获)

阅读更多

     这个问题是继dwr缓慢的有一个让我伤脑筋的问题,我在百度和google想寻求解决方法,可是没有人知道,也许知道没有发帖。最后一个以外的想法,让我找到了解决方法。
     我的功能原型是两个下拉列表的联动,这个在先前已经成功,下面就是最后一个下拉列表onchange事件,调用dwr中的回调方法,进行查询显示在我指定的table处。下拉列表联动我就不说了,这次主要说查询后的list回调,以及checkbox得到对象的主键问题。

首先看看底层service方法:

//	根据单位和部门得到所得信息
	public List getAllPeople(String companyId,String departmentId) {
//		初始化一个list
		List people = null;
		String hql="from EmployeeArchives as t where t.companyId ='"+companyId+"' and t.departmentId='"+departmentId+"'";
		try {
//			调用底层dao方法
			people = employeeArchivesDAO.find(hql);
		} catch (DAOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	System.out.println(people.size());
//    	返回list对象
        return people;
    }

 下面看看静态页面:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

  <head>
  <%
        String path = request.getContextPath();
        String basePath = request.getScheme() + "://"
                        + request.getServerName() + ":" + request.getServerPort()
                        + path + "/";
%>
<base href="<%=basePath%>">
    <title>My JSP 'QJ020305.jsp' starting page</title>
    <META HTTP-EQUIV="pragma" CONTENT="no-cache"/> 
    <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate"/> 
    <META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT"/>
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
<script  src="<%=basePath%>/dwr/engine.js" type="text/javascript"></script> 
<script  src="<%=basePath%>/dwr/util.js" type="text/javascript"></script> 
<script  src="<%=basePath%>/dwr/interface/Deptement.js" type="text/javascript"></script> 
<script  src="<%=basePath%>/dwr/interface/Company.js" type="text/javascript"></script> 
<script  src="<%=basePath%>/dwr/interface/People.js" type="text/javascript"></script> 
</head>  
<body onload="update1()">
<table width="98%" border="0" cellspacing="0" cellpadding="0" align="center">
  <tr class="trtop1">
    <td height="30" class="wenzi1">添加新学员</td>
  </tr>
</table>
<form action="" method="post" name="form1">
<table width="98%" border="0" align="center" cellpadding="0" cellspacing="1">
  <tr>
    <td>
	<table width="100%" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td width="12" height="26" class="tdtleftbg"> </td>
        <th class="tdtdline">xxx班级添加新学员</th>
        <td width="12" class="tdtrightbg"> </td>
      </tr>
    </table>
	</td>
  </tr>
  <tr>
    <td><table width="100%" border="0" cellpadding="0" cellspacing="0" class="tbbg1">
     
      <tr>
        <td colspan="3" align="left" class="trbg2">单位:
          <label>
          <select name="classid" id="classid" onchange="javascript:update2();">
          </select>
          </label>
          部门:          
          <select  name="userid" id="userid" onchange="javascript:init();">
          </select>
          <input type="button" name="Submit22" value="查询" onclick="document.location.href='QJ020305.htm';"></td>
      </tr>
      <tr>
        <td colspan="3" align="left" class="trbg2">未添加学员名单:
          <input type="button" name="Submit223" value="添加" onclick="return A();">
          <input type="button" name="Submit223" value="全选" onclick="return selected_all(this);">
          <input type="button" name="Submit2222" value="返回" onClick="history.go(-1);"/></td>
      </tr>
      <tr>
        <td align="center" class="trbg2">序号</td>
        <td align="center" class="trbg2">选择</td>
        <td align="center" class="trbg2">成员名称</td>
        <td align="center" class="trbg2">主键</td>
      </tr>
     <tbody id="peoplebody">
    <tr id="pattern" style="display=none">
      <td align="center" class="trbg2">
        <span id="tableName">序号</span><br/>
      </td>
      <td align="center" class="trbg2">
        <input id="checkbox" name="checkbox" type="checkbox" />       
      </td>
      <td align="center" class="trbg2">
       <span id="tableAddress">成员名称</span>
      </td>     
       <td align="center" class="trbg2">
       <span id="empid">主键</span>
      </td>   
    </tr>
  </tbody>
    </table></td>
  </tr>     
  <tr>
    <td>
	<table width="100%" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td width="12" height="26" class="tddleftbg"> </td>
        <td class="tdtdline"> </td>
        <td width="12" class="tddrightbg"> </td>
      </tr>
    </table>
	</td>
  </tr>
</table>
  <div align="center">
  </div>
</form>
</body>
</html>

 

下面是js,以及回调方法:

<script> 
function update1() 
{ 
       Deptement.ClassList(createList1); 
} 
function createList1(data) 
{ 
    DWRUtil.removeAllOptions("classid"); 
    DWRUtil.addOptions("classid",data); 
} 
function update2() 
{ 
       Company.UserList(DWRUtil.getValue("classid"),createList2); 
} 
function createList2(data) 
{    
    DWRUtil.removeAllOptions("userid"); 
    DWRUtil.addOptions("userid",data); 
} 
function query(){
    DWRUtil.removeAllRows("apartmentsbody");
    var classid = DWRUtil.getValue("classid");
    var userid = DWRUtil.getValue("userid");
    Query.queryList(classid,userid,fillt);
}
var cellFuncs = [
  function(data) { return data[0]; },
  function(data) { return data[1]; },
  function(data) { return data[2];},
  function(data) { return data[3]; },
 ];
function fillt(list){
   DWRUtil.addRows("apartmentsbody",list,cellFuncs);
}
function init() {
  fillTable();
}
var peopleCache = { };
var viewed = -1;
function fillTable() {
  var company = DWRUtil.getValue("classid");
  alert("+++++++++"+company);
  var deptment = DWRUtil.getValue("userid");
  alert("+++++++++"+deptment);
  People.getAllPeople(company,deptment,function(people) {
    dwr.util.removeAllRows("peoplebody", { filter:function(tr) {
      return (tr.id != "pattern");
    }});  
    var person, id;
    people.sort(function(p1, p2) { return p1.employeeName.localeCompare(p2.employeeName); });
    for (var i = 0; i < people.length; i++) {
      person = people[i];
      id = person.employeeArchivesId;          
      dwr.util.cloneNode("pattern", {idSuffix:id});     
      dwr.util.setValue("tableName" + id, person.employeeName);
      dwr.util.setValue("tableSalary" + id, person.gender);
      dwr.util.setValue("tableAddress" + id, person.nativePlace);       
      dwr.util.setValue("checkbox" +id, person.employeeArchivesId);     
      dwr.util.setValue("empid" +id, person.employeeArchivesId);     
      // box.innerHTML="<input id='checkbox' type='checkbox'  value='id' />";
      // document.getElementById("checkbox").value=id;
      $("pattern" + id).style.display = "block";     
      peopleCache[id] = person;
    }
  });
}
</script> 

 

这个js包括了两个查询回调方法,都可以用,一个使用 DWRUtil.addRows"apartmentsbody",list,cellFuncs);这个方法,是可以显示的,但是要循环输出一个按钮,或者是checkbox有点难,至少我不会,如果有朋友知道,可以给我恢复一下,让我也能学习点东西,谢谢。

第二个方法就是fillTable()这个函数,他得到list后,利用dwr与spring整合后的convert元素中bean配合,正如我上面定义的一个person变量,将list循环转化为person.最后输出。以上这些我想大家也都做过。

    下面是我遇到的困难,以及解决。我在循环的时候,大家应该已经看到,我想给checkbox赋值,并且是对象的主键,以便最后选择提交。就这个问题有难为我了两天,我查遍了所有资料,没有一个提及到,有个外国朋友说dwr2.0不能给checkbox这个标签setvalue我不信,但是一天以后我和他想的一样,弄得我简直就要神经了,可是我全选后,checkbox的值总是默认值“on”。我想了很多办法,可是都不行,不过有一种方法,让我有了想法,我看看dwr官方demo,他有一个table做了一个edit和delete按钮,上面有个onclick方法:edit(this.id)于是我想我onclick,checkbox的时候页写个这个方法试试,写完后运行ok,主键号可以得到,可是得到下来呢,我怎麽让提交能把这些id带过去呢,我想只要点一下,将主键写到一个文本域中(隐藏),不断累加,用逗号隔开,但是,如果我再点掉又触发了一次事件,再次写入文本域中,这样提交,会把不需要的东西提交,所以这样写,也不行。

下面是我的checkbox全选js

<script> 
function A(){
var allcheckboxs = document.getElementsByName("checkbox");
	var array = new Array();
	var isSelect = false;
	var index = 0;
	//取值
	for(i=0;i<allcheckboxs.length;i++){
		if(allcheckboxs[i].checked){
			array[index] = allcheckboxs[i].id.substring(8);				
			index++;
			isSelect = true;
		}
	}
	if(!isSelect){   //判断是否选中
		alert("没有选中任何记录!!");
		return false;
	}else{ //有选中记录
			    if(confirm("是否保存信息?")){		
					javascript:location="QJ020305Action.do?logId="+array;	
					alert("成功保存信息");
					return true;
				}else{
				    return false;
				}
	}
}
function selected_all(obj){
	var allcheckboxs = document.getElementsByName("checkbox");
	var flag = false;
	
	for(i=0;i<allcheckboxs.length;i++){
		flag = allcheckboxs[i].checked;
	}
	if(flag == false){
		for(i=0;i<allcheckboxs.length;i++){
			allcheckboxs[i].checked = true;			
		}
	}else{
		for(i=0;i<allcheckboxs.length;i++){
			allcheckboxs[i].checked = false;	
		}
	}	
}
</script> 

眼力好的朋友们已经看到了和所有全选js不同的是

if(allcheckboxs[i].checked){
			array[index] = allcheckboxs[i].id.substring(8);				
			index++;
			isSelect = true;
		}


这个地方我用到了allcheckboxs[i].id.substring(8);不向以前都是。value我试了很多次都不行,而现在用这个完全可以,只不过要substring,因为dwr出来的这个id是checkbox+id,这样就ok了,说了一大堆,这才是重点,网上没有人这样做。但是,这样可以,真是意外的收获和惊喜。

分享到:
评论
4 楼 hax 2008-05-13  
问题描述不清楚,代码又冗长。所以没有人看是很正常的。
3 楼 guo_david_wei 2008-05-13  
没有人愿意看javascript代码,兄弟....
除非他也遇到同样的错误....
2 楼 minidog 2008-04-11  
你好,我也想用DWR循环输出checkbox,请指教
1 楼 wangchao_17915566 2008-03-28  
这篇文章难道没有你们想要的东西吗?如果有人遇到这方面的问题,请留言,一起解决。

相关推荐

    DWR2.0 中文手册

    7. **调试工具**:DWR提供了一个内置的调试工具,可以帮助开发者在开发过程中查看和调试DWR的通信过程,便于问题定位。 8. **性能优化**:DWR 2.0对性能进行了优化,如通过压缩和合并JavaScript文件来减少HTTP请求...

    DWR2.0中文文档

    在**DWR2.0中文文档.pdf**中,读者将逐步学习DWR的安装、配置、使用,以及如何在实际项目中实现各种功能。书中还会通过示例代码和案例分析来帮助读者掌握DWR的精髓,从而在自己的项目中高效地运用这项技术。 总的来...

    DWR2.0 整合Spring2.0

    在DWR2.0中,整合Spring2.0主要涉及以下几个方面: 1. **依赖注入(Dependency Injection, DI)**:Spring框架的核心特性之一就是DI,它可以将对象的依赖关系解耦,使得代码更加灵活和可测试。通过Spring的...

    dwr2.0 dwr3.0 jar包

    在这个版本中,DWR提供了一套全面的API,包括自动转换Java对象到JSON格式,以及处理安全性和并发性问题。此外,DWR 2.0支持自动刷新,这意味着当服务器端的Java类或方法发生变化时,无需重新加载页面,客户端的...

    DWR3.0.jar、DWR.war和DWR2.0中文说明文档

    这个压缩包包含了DWR的三个关键组件:DWR3.0.jar,DWR的实例war文件,以及DWR2.0的中文说明文档。以下是关于这些组件的详细知识: 1. **DWR3.0.jar**: DWR3.0.jar是DWR框架的核心库,包含所有必需的类和接口,...

    dwr 2.0 的 dtd 和官方网站首页

    在DWR 2.0中,DTD文件包含了对新功能和接口的定义,使得开发者能够更好地理解和使用DWR的新特性。 在描述中提到的"新鲜的,还热乎呢",这可能意味着这个资源是刚更新的或者是最新的,可能包含DWR 2.0的最新改动、...

    dwr2.0最简单例子实用亲测试

    在“dwr2.0最简单例子实用亲测试”中,我们可以预期这是一个关于如何使用DWR 2.0版本的入门教程,包含了实际可运行的示例代码。下面将详细介绍DWR的基本概念和在这个实例中可能涉及的关键知识点: 1. **DWR的核心...

    Dwr3.0 与 Dwr2.0 区别

    - 在 DWR 2.0 中,整体架构相对简单,主要用于支持基本的 AJAX 功能。 - 它的核心功能是提供 JavaScript 调用 Java 方法的能力。 - 该版本更多关注于基础的远程调用支持,对于复杂的业务逻辑支持有限。 **DWR 3.0:...

    dwr2.0 spring 3.0 整合示例

    - 在DWR 2.0中,我们需要在Web应用的`WEB-INF/dwr.xml`配置文件中定义允许访问的Java类和方法。 - 这些配置告诉DWR哪些服务器端对象和方法可以暴露给JavaScript。 - 我们还可以配置安全性设置,如IP过滤,以防止...

    dwr2.0学习例子

    这个"**dwr2.0学习例子**"提供了实践DWR 2.0特性的实例,帮助开发者快速理解和应用DWR。 **DWR框架的核心功能:** 1. **动态代理**:DWR允许服务器端的Java对象被自动暴露到客户端的JavaScript中,使得开发者无需...

    DWR2.jar + DWR.xml + DWR2.0.dtd + Web.xml

    总的来说,这些文件共同构成了DWR2.0在Java Web应用程序中的基础架构。DWR2.jar提供了核心功能,DWR.xml定制了DWR的行为,DWR2.0.dtd保证了配置文件的正确性,而Web.xml确保了DWRServlet的正确部署和配置。通过熟练...

    DWR 2.0M3 学习笔记

    DWR 2.0M3 是该库的一个版本,其中的"M3"代表了第三个里程碑版本,通常意味着它已经相对成熟,但可能还有一些未解决的问题或待完善的特性。 在DWR 2.0M3的学习笔记中,我们可以深入探讨以下几个关键知识点: 1. **...

Global site tag (gtag.js) - Google Analytics