JSP 带复选框的数 传递参数
来源:互联网 发布:国内商科博士 知乎 编辑:程序博客网 时间:2024/05/14 20:34
根据数据的层次码,自动生成一个带复选框的数,当用户对数操作选择后,返回所选的参数^_^
其中注意:要生成一个四维数组,数组的定义为: 其中代表的意思如下:
String StrArr[][] =new String[SIZE][4];
StrArr[i][0] = “返回值”;
StrArr[i][1] = “层次码”;
StrArr[i][2] = “显示名称”;
StrArr[i][3] = “叶子项?”;
此例子共有2文件和一个文件夹
(1)TREE.jsp
<%@ page contentType="text/html; charset=utf-8" language="java" errorPage="" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<%--
·根据层次码确定结构
·同级层数据没有顺序(按照记录集顺序读取)
·断开的层次码不会影响整个树
·加入全开合树枝控制
·仅支持ie浏览器
·字段结构要求: id|层次码|显示文本|叶子节点标识
·字典说明:节点的id与业务id不一样!一般情况下,节点id都是根据levelcode生成的。业务id在树的操作处理中不起作用
--%>
<%
//-------------------------------------------------
//模拟记录集数据:
String StrArr[][] =new String[20][4];
StrArr[1][0]="2234"; //id
StrArr[1][1]="002" ; //levelcode
StrArr[1][2]="节点2"; //content
StrArr[1][3]="F"; //leaf
StrArr[2][0]="39870"; //id
StrArr[2][1]="003" ; //levelcode
StrArr[2][2]="节点3"; //content
StrArr[2][3]="F"; //leaf
StrArr[3][0]="00011 ";//id
StrArr[3][1]="001001" ;//levelcode
StrArr[3][2]="节点11" ;//content
StrArr[3][3]="F" ;//leaf
StrArr[4][0]="635412 ";//id
StrArr[4][1]="001002" ;//levelcode
StrArr[4][2]="节点12" ;//content
StrArr[4][3]="F" ;//leaf
StrArr[6][0]="2155 ";//id
StrArr[6][1]="002001" ;//levelcode
StrArr[6][2]="节点21" ;//content
StrArr[6][3]="F" ;//leaf
StrArr[7][0]="2299 ";//id
StrArr[7][1]="002002" ;//levelcode
StrArr[7][2]="节点22" ;//content
StrArr[7][3]="F" ;//leaf
StrArr[8][0]="235364 ";//id
StrArr[8][1]="002003" ;//levelcode
StrArr[8][2]="节点23" ;//content
StrArr[8][3]="F" ;//leaf
StrArr[9][0]="000301 ";//id
StrArr[9][1]="003001" ;//levelcode
StrArr[9][2]="节点31" ;//content
StrArr[9][3]="F" ;//leaf
StrArr[10][0]="3288 ";//id
StrArr[10][1]="003002" ;//levelcode
StrArr[10][2]="节点32" ;//content
StrArr[10][3]="F" ;//leaf
StrArr[11][0]="33434 ";//id
StrArr[11][1]="003003" ;//levelcode
StrArr[11][2]="节点33" ;//content
StrArr[11][3]="F" ;//leaf
StrArr[12][0]="111546 ";//id
StrArr[12][1]="001001001" ;//levelcode
StrArr[12][2]="节点111" ;//content
StrArr[12][3]="T" ;//leaf
StrArr[13][0]="11243 ";//id
StrArr[13][1]="001001002" ;//levelcode
StrArr[13][2]="节点112" ;//content
StrArr[13][3]="T" ;//leaf
StrArr[14][0]="1921 ";//id
StrArr[14][1]="001002001" ;//levelcode
StrArr[14][2]="节点121" ;//content
StrArr[14][3]="T" ;//leaf
StrArr[15][0]="1292 ";//id
StrArr[15][1]="001002002" ;//levelcode
StrArr[15][2]="节点122" ;//content
StrArr[15][3]="T" ;//leaf
StrArr[5][0]="7230 ";//id
StrArr[5][1]="001002003" ;//levelcode
StrArr[5][2]="节点123" ;//content
StrArr[5][3]="F" ;//leaf
StrArr[16][0]="391000 ";//id
StrArr[16][1]="003003001" ;//levelcode
StrArr[16][2]="节点331" ;//content
StrArr[16][3]="T" ;//leaf
StrArr[17][0]="83290 ";//id
StrArr[17][1]="003003002" ;//levelcode
StrArr[17][2]="节点332" ;//content
StrArr[17][3]="T" ;//leaf
StrArr[0][0]="13245"; //id
StrArr[0][1]="001" ; //levelcode
StrArr[0][2]="节点1"; //content
StrArr[0][3]="F"; //leaf
//-------------------------------------------------
String ActionPage="TREE_ACTION.jsp";
%>
<style>
/*树的样式*/
.myTree_C1{ font-size:12px;}
.myTree_C1 div{ margin-left:15px;}
</style>
<script language="javascript">
//Trim
/* ***************** */
String.prototype.Trim = function()
{
return this.replace(/(^/s*)|(/s*$)/g, "");
}
//子函数——得到父节点id(即父亲项的levelcode)
function getFatherID(levelcode){
var fatherID="";
if(levelcode.length>3){
fatherID="J" + levelcode.substring(0,levelcode.length-3);
}
else{
fatherID="myTree";
}
return fatherID;
}
</script>
</head>
<body style="background-color:#FFFFFF">
<form action="<%=ActionPage %>" method="post">
<ul id='UlDatas' style='display:none'>
<%
//将入口数据内容顺序储存到网页控件的value:
for(int i=0;i<=17;i++){
for(int j=0;j<=3;j++){
out.print("<li>" + StrArr[i][j] + "</li>");
}
}
%>
</ul>
<script language="javascript">
//javascript储存入口数据的数组:
var stringArr = new Array();
for(var i=0;i<=17;i++){
stringArr[i] = new Array(4); //*注意要与记录项数相等*
}
//定义数型结构的图片源:
var MlastIMG="images/tree/ftv2mlastnode.gif";
var PlastIMG="images/tree/ftv2plastnode.gif";
var LeafIMG="images/tree/ftv2lastnode.gif";
var MlastABG="url(images/tree/OPEN.BMP) no-repeat";
var PlastABG="url(images/tree/CLOSED.BMP) no-repeat";
var LeafABG="url(images/tree/LEAF.BMP) no-repeat";
//将前台控件集的值交给javascript数组:
var ulDB=document.getElementById("UlDatas");
var liDatas=ulDB.getElementsByTagName("li"); //获得前台记录数据集的控件集
var numL=0;
for(var i=0;i<stringArr.length;i++){
for(var j=0;j<stringArr[i].length ;j++){
if( numL<liDatas.length){
stringArr[i][j]=liDatas[numL].innerText.Trim(); //赋值
numL++;
//document.write("["+i+","+j+"]::" +stringArr[i][j] + "<br>");
}else{
break; //如果超出控件集个数则终止
}
}
}
</script>
<!--树 start----------------------------->
<div class="myTree_C1">
<a id="myTreeCtrlAll" name="2" href="#">[+]</a><br />
<div id="myTree"></div>
</div>
<!--树 end------------------------------->
<script language="javascript">
/************************ 向树框架中插入内容: **********************************/
for(var i in stringArr){ //遍历所有数据记录:
thisID="J"+ stringArr[i][1]; //通过信息的levelcode生成节点id
thisContent=stringArr[i][2]; //节点显示内容
var YesLeaf=stringArr[i][3];
var anchorText=document.createTextNode(thisContent);
var newAnchor_img=document.createElement("img"); //树型图片
var newAnchor_a=document.createElement("a"); //本节点链接容器
var newAnchor_br=document.createElement("br"); //换行符
var newAnchor_div=document.createElement("div"); //本节点包含子节点的容器
var newAnchor_chx=document.createElement("input"); //节点复选框 (080602byLQ)
thisAID="a"+ thisID; //节点链接id
newAnchor_a.id=thisAID; //通过id可以间接找到div
newAnchor_a.style.paddingLeft=16;
newAnchor_a.appendChild(anchorText); //在本节点中加入显示内容
newAnchor_div.id=thisID;
newAnchor_div.style.display = "none"; //div显示方式:
thisImgID="m"+ thisID; //节点图片id
newAnchor_img.id=thisImgID; //通过id可以间接找到div
newAnchor_img.align="absmiddle";
thisChxID="x"+thisID; //节点复选框id
newAnchor_chx.id=thisChxID; //通过id可以间接找到div
newAnchor_chx.type="checkbox"; //定义为复选框
newAnchor_chx.name = "treeChkBoxes"; //树中所有复选框统一名字
//如果是叶子节点:
if(YesLeaf!=null && YesLeaf=="T"){
newAnchor_a.href="<%=ActionPage %>?id="+stringArr[i][0]; //节点指向链接【根据业务需要更改值的内容】
newAnchor_a.name="leafA"; //当是叶子节点时,<a>统一是这个名字
newAnchor_a.style.background=LeafABG;
newAnchor_img.src=LeafIMG;
newAnchor_img.name="leafImage"; //当是叶子节点时,图片统一是这个名字
//复选框赋值:
newAnchor_chx.value = stringArr[i][0]; //【根据业务需要更改值的内容】
}
//如果不是叶子节点:
else{
newAnchor_a.href="#"; //节点开合控制
newAnchor_a.name=thisID; //!注意:非常重要,通过a的name可以找到div!
newAnchor_a.style.background=PlastABG;
newAnchor_img.src=PlastIMG;
newAnchor_img.name=thisID; //当不是叶子节点时,通过img的name可以找到div!
//注意:非叶子节点的复选框为空
newAnchor_chx.value = "";
}
var parentID=getFatherID(stringArr[i][1]); //用函数获得当前节点的父项id
var parent=document.getElementById(parentID); //当前节点的父对象
//当父对象存在时,插入该节点:
if(parent){
parent.appendChild(newAnchor_img);
parent.appendChild(newAnchor_a);
parent.appendChild(newAnchor_chx);
parent.appendChild(newAnchor_br);
parent.appendChild(newAnchor_div);
}
}
/************************ 事件监听: 开始 **********************************/
var TreeA=document.getElementById("myTreeCtrlAll"); //Mother tree-a
var treeDiv=document.getElementById("myTree"); //Mother tree-div
var treeimgs=treeDiv.getElementsByTagName("img"); //img in tree-div
var treeas=treeDiv.getElementsByTagName("a"); //a in tree-div
var treedivs=treeDiv.getElementsByTagName("div"); //div in tree-div
var treeInputs=treeDiv.getElementsByTagName("input"); //input in tree-div
//遍历树myTree中的<a>对象,鼠标点击时触发下面的事件:
for (var k in treeas){
treeas[k].onclick=function(){
var e = window.event.srcElement;
var objDiv = document.getElementById(e.name); //a的name就是div的id
var imgId="m" + e.name;
var oImg = document.getElementById(imgId); //"m"+a的name = img的id
//如果不是叶子节点的<a>:
if(e.name!="leafA"){
if(objDiv.style.display=="block"){
objDiv.style.display="none";
oImg.src=PlastIMG;
e.style.background=PlastABG;
}
else if(objDiv.style.display=="none"){
objDiv.style.display="block";
oImg.src=MlastIMG;
e.style.background=MlastABG;
}
}
};
}
/***/
//遍历树myTree中的<img>对象,鼠标点击时触发下面的事件:
for (var k in treeimgs){
treeimgs[k].onclick=function(){
var e = window.event.srcElement;
var aId="a" + e.name;
//如果不是叶子节点的图片:
if(e.name!="leafImage"){
var objDiv = document.getElementById(e.name); //img的name就是div的id
var objA = document.getElementById(aId); //img的name就是div的id
if(objDiv.style.display=="block"){
objDiv.style.display="none";
e.src=PlastIMG;
objA.style.background=PlastABG;
}
else if(objDiv.style.display=="none"){
objDiv.style.display="block";
e.src=MlastIMG;
objA.style.background=MlastABG;
}
}
};
}
/***/
//遍历树myTree中的属性为checkbox的<input>对象(复选框),鼠标点击时触发下面的事件:
for (var k in treeInputs){
treeInputs[k].onclick=function(){
var e = window.event.srcElement;
if(e.type!="checkbox") return;
var Id = e.id;
var dId = Id.substring(1,Id.length)
var aId = "a" + dId;
var myA=document.getElementById(aId);
//如果点击的不是叶子项,则要向内遍历执行:
if(myA.name!="leafA"){
chksign = e.checked;
var myDiv = document.getElementById(dId);
var mySonInputs=myDiv.getElementsByTagName("input"); //input in tree-div
for(var u in mySonInputs){
if(mySonInputs[u].type=="checkbox"){
mySonInputs[u].checked = chksign;
}
}
}
//去掉直接父亲节点的勾:
// var fatherId = getFatherID(dId.substring(1,dId.length))
// fatherO = document.getElementById("x"+fatherId);
// if(fatherO)fatherO.checked=false;
};
}
/***/
//全遍历--点击树的总开关,完全打开/关闭树结构:
TreeA.onclick=function(){
//1--〉2 完全打开--〉完全关闭:
if(TreeA.name=="1"){
for (var k=0; k<treedivs.length; k++){
treedivs[k].style.display="none";
//如果不是叶子节点的图片:
if(treeimgs[k].name!="leafImage"){ treeimgs[k].src=PlastIMG;}
//如果不是叶子节点的a:
if(treeas[k].name!="leafA"){treeas[k].style.background=PlastABG;}
}
TreeA.name="2";
}
//2--〉1 完全关闭--〉完全打开:
else if(TreeA.name=="2"){
for (var k=0; k<treedivs.length; k++){
treedivs[k].style.display="block";
//如果不是叶子节点的图片:
if(treeimgs[k].name!="leafImage"){ treeimgs[k].src=MlastIMG;}
//如果不是叶子节点的a:
if(treeas[k].name!="leafA"){treeas[k].style.background=MlastABG;}
}
TreeA.name="1";
}
};
/************************ 事件监听: 结束 **********************************/
</script>
<input name="" type="submit" value="提交" />
</form>
</body>
</html>
(2)TREE_ACTION.jsp
<%@ page contentType="text/html; charset=utf-8" language="java" errorPage="" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
</head>
<body>
<%
request.setCharacterEncoding("utf-8");
%>
接收来自myTree的链接信息:<br />
<%
try{
String id="";
id = request.getParameter("id");
out.print(id);
}catch(Exception e){}
%>
<br />
<hr />
<br />
接收来自myTree的复选框信息:<br />
<%
try{
String a[] = request.getParameterValues("treeChkBoxes");
for (int i=0;i<a.length;i++){
out.print(a[i]);
if(a[i].equals("")) out.print(" --[非叶子项]");
out.print("<br>");
}
}catch(Exception e){}
%>
</body>
</html>
(3)images文件夹,里面是树节点的一些图标:"+","-"等等。此文件夹可到我的资源上去下载,希望对大家有帮助。
- JSP 带复选框的数 传递参数
- JSP传递带特殊字符的参数。
- 关于复选框的传递
- 带复选框的窗口
- 带复选框的ListBox
- 带复选框的JTable
- jsp参数传递的方法
- JSP页面结合Struts2如何传递复选框对应的id数组到后台action中
- Struts下JSP页面传递复选框值技巧
- Struts下JSP页面传递复选框值技巧
- 带复选框的树控件-复选框点击事件
- 带复选框的CTreeCtrl响应复选消息
- 带复选框的CTreeCtrl响应复选消息
- 带复选框的CTreeCtrl响应复选消息
- 带复选框的CTreeCtrl响应复选消息
- 带复选框的CTreeCtrl响应复选消息
- 求救带参数的传递 邮件
- NSNotificationCenter 传递带参数的通知
- 设计模式之Flyweight(享元) FlyWeight模式
- firebug
- C#中一套生成sql条件的类
- 第一卷 第三章 托梦
- 禁止页面内容被拷贝的方法
- JSP 带复选框的数 传递参数
- 设计模式之Bridge
- Microsoft Windows Server 2003 的 SMTP Tar Pit 功能
- FCKeditor 2.6在ASP.NET中的配置方法(附源码下载)
- 设计模式之Decorator(油漆工)
- .NET 程序员十种必备工具摘抄
- wsprintf()的用法
- C#一个封装的加密解密类
- 区域生长算法代码