本帖最后由 hh5306346 于 2009-11-11 21:35:54 编辑

解决方案 »

  1.   


    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <TITLE> New Document </TITLE>
    <META NAME="Generator" CONTENT="EditPlus">
    <META NAME="Author" CONTENT="">
    <META NAME="Keywords" CONTENT="">
    <META NAME="Description" CONTENT="">
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    //默认选中checkbox值
    var selectValue = "1,2";
    function init(){
    var o = document.getElementById("checkboxs").getElementsByTagName("input");
    var tmp = selectValue.split(",");
    alert(tmp[0]);
    for(var i=0; i < o.length; i++){
    for(var j = 0 ; j < tmp.length ; j ++)
    {
    if(o[i].value == tmp[j]){
      o[i].checked = true;
     }
    }
        }
    }
    //-->
    </SCRIPT>
    </HEAD>
    <BODY onload="init()">
    <span id="checkboxs">
    <input type="checkbox" value="1" onclick="kt()" />345553名称一<br />
    <input type="checkbox" value="2" onclick="kt()" />577441名称二<br />
    <input type="checkbox" value="3" onclick="kt()" />643533名称三<br />
    <input type="checkbox" value="4" onclick="kt()" />356764名称四<br />
    </span>
    </BODY>
    </HTML>
      

  2.   


    <SCRIPT LANGUAGE="JavaScript">
    <!--
    var selectValue = "北京,天津";
    function init(){
    var o = document.getElementById("checkboxs").getElementsByTagName("input");
    var tmp = selectValue.split(",");
    for(var i=0; i < o.length; i++){
    for(var j = 0 ; j < tmp.length ; j ++)
    {
    if(o[i].value == tmp[j]){
      o[i].checked = true;
     }
    }
        }
    }
    window.onload=init;
    //-->
    </SCRIPT>
    <span id="checkboxs">
    <input type="checkbox" value="北京" onclick="kt()" />北京<br />
    <input type="checkbox" value="河北" onclick="kt()" />河北<br />
    <input type="checkbox" value="天津" onclick="kt()" />天津<br />
    <input type="checkbox" value="上海" onclick="kt()" />上海<br />
    </span>
      

  3.   

    就楼主这么爽快,我花点时间吧:第一方案是借助框架,例如Struts和Spring MVC,它们封装的checkbox标签都可以自动还原选项,但你的city2属性必须集合类型,例如List、Set。你可以在bean中做一个方法将带逗号的字符分解成集合,再绑定到框架封装的checkbox标签中。举个代码实例,假如有一个文章Bean(Article)和用户组Bean(UserGroup),要完成一个技术需求是,某篇文章只能是某几个用户组的用户才能看,这样构成了对多对关系,那么Article中应该如下属性:
    Set<UserGroup> userGroups = new HashSet<UserGroup>();
    你在Action中将所有的UserGroup查询到一个List中,再将这个List放在request作用域中。例如:List<UserGroup> ugs = orm.getUserGroups();
    request.setAttribute("ugs",ugs);再到JSP(使用Spring MVC的Form标签库)页面:
    <form:checkboxes path="userGroups " items="${ugs}" itemLabel="roleName" itemValue="roleId"/>
    这样就一对多写入到数据库,反过来在编辑(修改)的时候自动还原到Html页面(已选的自动勾选)。第二种方案,用Jstl在Jsp页面上判断,仍然以文章-用户组来说明:
    首先仍然要查询出母数据,并存入request对象中,就像得到所有的地区数据一样
    List<UserGroup> ugs = orm.getUserGroups();
    request.setAttribute("ugs",ugs);然后在Jsp页面上,用Html标准的form表单的checkbox控件:
    <c:forEach items="${ugs}" var="ug">
    <input type="checkbox" value="${ug.roleId}" <c:if test='${fn:contains(article.userGroups,us)}'>checked="true"</c:if>/>${ug.roleName}<br />
    </c:forEach>其中代码:
    <c:if test='${fn:contains(article.userGroups,us)}'>checked="true"</c:if>
    表示总用户组某组是否包含在该文章中的某用户组,如果包含则让checkbox勾选上。
    第二种方案是用了原生态的checkbox控件。
      

  4.   


    fn:contains(article.userGroups,us)你这us哪来的??还有就是我是在action aaa里搜出的集合,集合类型是user的话,怎么写??
      

  5.   

    我用javascript做个动态的checkbox   你到时可以用arraylist替换<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
     <HEAD>
      <TITLE> New Document </TITLE>
      <META NAME="Generator" CONTENT="EditPlus">
      <META NAME="Author" CONTENT="">
      <META NAME="Keywords" CONTENT="">
      <META NAME="Description" CONTENT="">
      <script>
    var value = "北京,上海,成都";
    var aa=new Array(); //定义一维数组    
    for(var i=0;i<=4;i++)    
    {    
    if(i==0){
    aa[i] = "北京";

    }
    if(i==1){
    aa[i] = "上海";


    if(i==2){
    aa[i] = "天津";


    if(i==3){
    aa[i] = "重庆";


    if(i==4){
    aa[i] = "成都";



    }   function load(){
    var ss = "";

    for(var p=0;p<aa.length;p++){
    if(value.indexOf(aa[p])==-1){
    ss= ss +"<input type='checkbox' name='city' value="+aa[p]+">"+aa[p]+"&nbsp;&nbsp;";
    }else{
    ss= ss +"<input type='checkbox' name='city' value="+aa[p]+" checked>"+aa[p]+"&nbsp;&nbsp;";
    }

    }
    document.getElementById("check").innerHTML=ss;

    }
    function sss(){
    var aa = "";

    var city = document.getElementsByName("city");
    for(var j=0;j<city.length;j++){

    if(city[j].checked){
    aa = aa + city[j].value + ",";
    }
    }
    if(aa.length>1){
    aa = aa.substr(0,aa.length-1);
    }else{
    aa = "没有选择内容";
    } alert(aa);
    }
      </script>
     </HEAD> <BODY onload="load()">
      <br/>
      <div id="check"></div><br/><br/>
      <input type="button" value="查看" onclick="sss()">
     </BODY>
    </HTML>
      

  6.   

    不是us,是var="ug">中的ug,写错了。
    集合中的类型是user,也是同样用c:forEach遍历。
      

  7.   

    <c:if test='${fn:contains(article.userGroups,us)}'>checked="true" </c:if> 里的
    article.userGroups不知道是什么,我的情况是这样的,我从数据库里搜出来的集合user,List user = servicePaeaAudtPolicyDefineImpl.finduser();
    然后我吧这个集合setAttribute到页面,然后怎么写article.userGroups这段??
      

  8.   

    我还是按你的需求重写一遍吧,假如你有两个类,分别User用户、City城市,你现在的需求是一个用户可有多个城市,一个城市可有多个用户,构成多对多关系(否则不需要复选框的),代码:User.java
    private String userName;//主键private String passWord;//密码@ManyToMany(cascade=CascadeType.REFRESH,fetch=FetchType.EAGER)
    @JoinTable(name ="user_city",
    joinColumns=@JoinColumn(name="userName"),
    inverseJoinColumns=@JoinColumn(name="cityCode")
    )
    private Set<City> cities = new HashSet<City>;//与city对象发生关系,且User是主控端
    City.java
    private String cityCode;//城市代码,作主键private String cityName;//城市名称@ManyToMany(fetch=FetchType.LAZY,mappedBy="cities ")
    private Set<User> users = new HashSet<User>;//与user对象发生关系,自己是被控端
    除了两者多对多关系写了配置外,其它配置自己写吧。使用说明:由于你是要还原,所以可看作是你的数据里已经有了user对象了,那么Action中:
    User user = orm.getUser("zhangsan");//查出一个叫张三的用户List<City> cities = orm.getCities();//查出所有城市数据request.setAttribute("user",user);
    request.setAttribute("cities",cities);//将两个都放入request作用域中。
    回到Jsp页面:
    你现在应该是要编辑用户,所以建立表单,将属性与User类对应,其中选择城市的checkbox如下:<c:forEach items="${cities}" var="city"> 
    <input type="checkbox" name="cities" value="${city.cityCode}" <c:if test='${fn:contains(user.cities,city)}'>checked="true" </c:if>/>${city.cityName} <br /> 
    </c:forEach> <c:if test='${fn:contains(user.cities,city)}'>checked="true"</c:if>表示当正在编辑的user对象已有的城市包含当前遍历的城市,则这个checkbox勾选上。
    如果正在编辑的user对象不是从数据库取出的,而是新建的(new User())出来的,那么user.cities的size==0,则所有遍历出来的城市都不会勾选上,这是符合逻辑的。