|
Posted on 2006-03-09 02:22 大大毛 阅读(273) 评论(0) 编辑 收藏 所属分类: JAVA
JavaBean类:
DeptBean,用于支持那棵树,因为是从以前作业中抠出来的,所以肯定是不会通用的,但是改改再用还是可行的。
import java.util.*;
 /** *//**用于支持部门的Tree视图
* @author tw
* xx:主要是通过setRootDept()方法来得到一棵树所必须的数据,所需参数指树从哪个部门开始,我的table的结构如下:
* create table t_dept (
* dept_id int primary key, ----主键
* dept_name varchar( ), ----显示用的名称
* dept_sit varchar( ) ); ----代表部门位置的字符串,例如总经理室 00,部门1 0001,部门2 0002
* hasChild()方法用于判断该部门是否具有下属部门
* hasNotShowBrother()方法用于判断该部门是否还有尚未处理的同级部门
* getIndex()方法用于从一个部门的位置,得到该部门在记录源中的序号(记录集是排过序的)
*/
 public class DeptBean {
public static final int SIT_STEP=2;
public static final int DEPT_ID=0;
public static final int DEPT_NAME=1;
public static final int DEPT_SIT=2;
private DbConnector connector;
private ArrayList data;
 public DeptBean() {
}
 public void setDbConnector(DbConnector connector) {
this.connector=connector;
}
 /** *//**设置根部门
* @param id:部门ID
*/
 public void setRootDept(int id) {
String sql;
sql="select dept_sit from t_dept where dept_id=" + id;
 try {
ArrayList table,row;
table=this.connector.executeQuery(sql);
row=(ArrayList)table.get(0);
String sit=(String)row.get(0);
setRootDept(sit);
 }catch(Exception e) {
System.out.println(e.getMessage());
}
}
 /** *//**设置根部门
* @param sit:部门位置
*/
 public void setRootDept(String sit) {
String sql;
sql="select dept_id,dept_name,dept_sit from t_dept " +
"where INSTR(dept_sit,'" + sit +
"')=1 order by dept_sit";
ArrayList row;
 try {
data=this.connector.executeQuery(sql);
System.out.println("共找到"+data.size()+"个部门");
 }catch(Exception e) {
System.out.println(e.getMessage());
}
}
 /** *//**获取数据
*/
 public ArrayList getData() {
return this.data;
}
 /** *//**检查是/否具有子部门
* @param dept_index:data中部门序号
*/
 public boolean hasChild(int dept_index) {
boolean result=false;
ArrayList theDept,nextDept;
String theSit,nextSit;
 if(dept_index < this.data.size()-1) { //还有未处理部门
theDept=(ArrayList)this.data.get(dept_index); //提取部门信息
theSit=(String)theDept.get(DeptBean.DEPT_SIT);
nextDept=(ArrayList)this.data.get(dept_index+1); //提取下一部门信息
nextSit=(String)nextDept.get(DeptBean.DEPT_SIT);
 if(nextSit.indexOf(theSit)==0) { //根据位置进行检查
result=true;
}
}
return result;
}
 /** *//**检查是/否具有未处理的兄弟部门
* @param dept_index:data中部门序号
*/
 public boolean hasNotShowBrother(int dept_index) {
boolean result=false;
ArrayList theDept,nextDept;
String parentSit,theSit,nextSit;
 if(dept_index < this.data.size()-1) { //还有未处理部门
theDept=(ArrayList)this.data.get(dept_index); //提取部门信息
theSit=(String)theDept.get(DeptBean.DEPT_SIT);
 if(theSit.length() > DeptBean.SIT_STEP) {
parentSit=theSit.substring(0,theSit.length() - DeptBean.SIT_STEP);
//System.out.println(parentSit);
 for(int i=dept_index+1;i<this.data.size();i++) { //检查下面部门
nextDept=(ArrayList)this.data.get(i); //提取下一部门信息
nextSit=(String)nextDept.get(DeptBean.DEPT_SIT);
 if(nextSit.indexOf(parentSit)==0 && nextSit.length()== theSit.length()) { //根据位置进行检查
result=true;
break;
}
}
}
}
return result;
}
 /** *//**检查是/否具有未处理的兄弟部门
* @param dept_Sit:data中部门位置
*/
 public boolean hasNotShowBrother(String dept_Sit) {
return this.hasNotShowBrother(this.getIndex(dept_Sit));
}
 /** *//**得到指定部门的序号
* @param dept_Sit:部门位置
*/
 public int getIndex(String dept_Sit) {
int dept_index=0;
ArrayList theDept;
String theSit;
 for(int i=0;i<this.data.size();i++) {
theDept=(ArrayList)this.data.get(i);
theSit=(String)theDept.get(DeptBean.DEPT_SIT);
 if(theSit.equalsIgnoreCase(dept_Sit)) {
dept_index=i;
break;
}
}
return dept_index;
}
 public static void main(String[] args) {
DeptBean bean1=new DeptBean();
}
}

JSP:
<%
@page contentType
=
"
text/html;charset=gb2312
"
%>
<%
@page
import
=
"
java.io.*
"
%>
<%
@page
import
=
"
bean.*
"
%>
<
html
>
<
style type
=
'
text/css
'
>
A:link
{color: #
000000
; TEXT
-
DECORATION: none;}
A:visited
{COLOR: #
000000
; TEXT
-
DECORATION: none}
A:active
{COLOR: #3333ff; TEXT
-
DECORATION: none}
A:hover
{COLOR: #3333ff; TEXT
-
DECORATION: none}
</
style
>
<
body bgcolor
=
'
#FFFFFF
'
>
<
jsp:useBean id
=
'
dept
'
scope
=
'
page
'
class
=
'
bean.DeptBean
'
/>
<%
DbConnector connector
=
new
DbConnector();
//
新建一个数据库连接器
dept.setDbConnector(connector);
//
将连接器与BEAN绑定
dept.setRootDept(
"
00
"
);
//
Init BEAN
String name,sit;
String proId
=
null
,theId;
int
tmp1;
int
rooLevel
=
0
,proLevel
=
0
,theLevel
=
0
;
java.util.ArrayList data
=
dept.getData(),row
=
null
;
//
拿出BEAN中的记录源,定义一个ROW来代表行
int
deptCount
=
data.size();
//
取得部门总数

for
(
int
dept_index
=
0
;dept_index
<
deptCount;dept_index
++
)
{
row
=
(java.util.ArrayList)data.get(dept_index);
//
取得当前部门资料(id,name,sit)
theId
=
((Integer)row.get(DeptBean.DEPT_ID)).toString();
theId
=
"
MEMU_
"
+
theId;
name
=
(String)row.get(DeptBean.DEPT_NAME);
sit
=
(String)row.get(DeptBean.DEPT_SIT);
theLevel
=
sit.length()
/
DeptBean.SIT_STEP;
//
计算当前部门所处级别

if
(dept_index
==
0
)
{
//
根部门
rooLevel
=
proLevel
=
theLevel
-
1
;
}

if
(theLevel
>
proLevel)
{
//
部门级数递增
//
新建一个控制表格,控制与当前同等级的部门
if
(dept_index
==
0
)
{
out.println(
"
<table border='0' cellspacing='0' width='100%' cellpadding='0' height='100%'>
"
);
out.println(
"
<tr>
"
);
out.println(
"
<td valign='top' align='left' style='BORDER-top: #000000 1px inset' bgcolor='#dee7ff'>
"
);
 }
else
{
out.println(
"
<table border='0' cellspacing='0' cellpadding='0' id='
"
+
proId
+
"
d' style='display:none'>
"
);
out.println(
"
<tr>
"
);
out.println(
"
<td>
"
);
}

if
(dept_index
>
0
&&
dept.hasChild(dept_index))
{
//
新建一个容器表格
out.println(
"
<table style='font-size:10pt' border='0' cellspacing='0' cellpadding='0'>
"
);
out.println(
"
<tr>
"
);
out.println(
"
<td>
"
);
}
 }
else
{

if
(theLevel
==
proLevel)
{
//
同级部门
 }
else
{
//
另一支树干
//
封闭多层控制表格
tmp1
=
0
;

do
{
out.println(
"
</td>
"
);
out.println(
"
</tr>
"
);
out.println(
"
</table>
"
);
tmp1
++
;
}
while
(tmp1
<
(proLevel
-
theLevel
-
1
)
*
2
);
}
}
//
新建一个数据表格
out.println(
"
<table style='font-size:10pt' border='0' cellspacing='0' cellpadding='0'>
"
);
//
画行首
out.println(
"
<tr>
"
);
//
画前导空格
if
(theLevel
!=
1
)
{
out.println(
"
<td><img src='images/tree/tree_transp.gif'></td>
"
);
}
//
画treeline
for
(tmp1
=
2
;tmp1
<
theLevel;tmp1
++
)
{
String proSit
=
sit.substring(
0
,tmp1
*
DeptBean.DEPT_SIT);

if
(dept.hasNotShowBrother(proSit))
{
out.println(
"
<td><img src='images/tree/tree_line.gif'></td>
"
);
 }
else
{
out.println(
"
<td><img src='images/tree/tree_transp.gif'></td>
"
);
}
}
//
System.out.println(dept_index);
//
画控制线
if
(dept.hasChild(dept_index))
{
//
具有下级部门

if
(dept.hasNotShowBrother(dept_index))
{
//
具有同级部门
out.println(
"
<td><img src='images/tree/tree_plus.gif' id='
"
+
theId
+
"
' class='outline' style='cursor:hand'></td>
"
);
 }
else
{
out.println(
"
<td><img src='images/tree/tree_plusl.gif' id='
"
+
theId
+
"
' class='outline' style='cursor:hand'></td>
"
);
}
}
else
{

if
(dept.hasNotShowBrother(dept_index))
{
//
具有同级部门
out.println(
"
<td><img src='images/tree/tree_blank.gif'></td>
"
);
 }
else
{
out.println(
"
<td><img src='images/tree/tree_blankl.gif'></td>
"
);
}
}
//
画名称
if
(dept.hasChild(dept_index))
{
out.println(
"
<td><a href='#' onclick='
"
+
theId
+
"
.click();openURL(\
""
+ theId +
"
\
"
);'>
"
+
name
+
"
</a></td>
"
);
 }
else
{
out.println(
"
<td><a href='#' onclick='openURL(\
""
+ theId +
"
\
"
);'>
"
+
name
+
"
</a></td>
"
);
}
//
画行结尾
out.println(
"
</tr>
"
);
//
out.println(
"
</table>
"
);
//
保留上节点数据
proId
=
theId;
proLevel
=
theLevel;
}
//
封闭全部表格
for
(tmp1
=
0
;tmp1
<
(theLevel
-
rooLevel
-
1
)
*
2
-
1
;tmp1
++
)
{
out.println(
"
</td>
"
);
out.println(
"
</tr>
"
);
out.println(
"
</table>
"
);
}
connector.close();
%>
</
body
>
<
script language
=
'
JavaScript
'
>
function clickHandler()
{
var targetid,srcelement,targetelement;
var strbuf;
srcelement
=
window.event.srcElement;


if
(srcelement.className
==
'
outline
'
)
{
targetid
=
srcelement.id
+
'
d
'
;
targetelement
=
document.all(targetid);

if
(targetelement.style.display
==
'
none
'
)
{
targetelement.style.display
=
''
;
strbuf
=
srcelement.src;
if
(strbuf.indexOf (
'
plus.gif
'
)
>-
1
)
srcelement.src
=
'
images/tree/tree_minus.gif
'
;
else
srcelement.src
=
'
images/tree/tree_minusl.gif
'
;
 }
else
{
targetelement.style.display
=
'
none
'
;
strbuf
=
srcelement.src;
if
(strbuf.indexOf (
'
minus.gif
'
)
>-
1
)
srcelement.src
=
'
images/tree/tree_plus.gif
'
;
else
srcelement.src
=
'
images/tree/tree_plusl.gif
'
;
}
}
}
document.onclick
=
clickHandler;
 function openURL(URL)
{
if
(URL
==
''
)
return
false
;
parent.frmShow.location
=
URL;
}
</
script
>
</
html
>
|