如何得到原来用户复选框的值 本帖最后由 hh5306346 于 2009-11-11 21:35:54 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 <!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> <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> 就楼主这么爽快,我花点时间吧:第一方案是借助框架,例如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控件。 fn:contains(article.userGroups,us)你这us哪来的??还有就是我是在action aaa里搜出的集合,集合类型是user的话,怎么写?? 我用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]+" "; }else{ ss= ss +"<input type='checkbox' name='city' value="+aa[p]+" checked>"+aa[p]+" "; } } 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> 不是us,是var="ug">中的ug,写错了。集合中的类型是user,也是同样用c:forEach遍历。 <c:if test='${fn:contains(article.userGroups,us)}'>checked="true" </c:if> 里的article.userGroups不知道是什么,我的情况是这样的,我从数据库里搜出来的集合user,List user = servicePaeaAudtPolicyDefineImpl.finduser();然后我吧这个集合setAttribute到页面,然后怎么写article.userGroups这段?? 我还是按你的需求重写一遍吧,假如你有两个类,分别User用户、City城市,你现在的需求是一个用户可有多个城市,一个城市可有多个用户,构成多对多关系(否则不需要复选框的),代码:User.javaprivate 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.javaprivate 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,则所有遍历出来的城市都不会勾选上,这是符合逻辑的。 struts2 将文件夹压缩打包下载 部署SSH项目到Weblogic的怪异问题 急!jsp在eclipse下编译的问题 求教:关于struts-jquery-plugin没有成功加载资源文件的问题 从文件读数据、排序、写数据,写的很笨拙,大家给些意见 请问如何学习利用 java web开发全书 在web服务器端如何获取以下信息 如何用Acegi动态角色控制权限呢? 如何在jsp页里面实现tab页 赋值问题 一个关于Internet服务管理器的问题,大家进来看下。。。 刷新问题
<!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>
<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>
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控件。
fn:contains(article.userGroups,us)你这us哪来的??还有就是我是在action aaa里搜出的集合,集合类型是user的话,怎么写??
<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]+" ";
}else{
ss= ss +"<input type='checkbox' name='city' value="+aa[p]+" checked>"+aa[p]+" ";
}
}
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>
集合中的类型是user,也是同样用c:forEach遍历。
article.userGroups不知道是什么,我的情况是这样的,我从数据库里搜出来的集合user,List user = servicePaeaAudtPolicyDefineImpl.finduser();
然后我吧这个集合setAttribute到页面,然后怎么写article.userGroups这段??
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,则所有遍历出来的城市都不会勾选上,这是符合逻辑的。