目录表jsp代码:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@page import="com.tecamo.cms.util.RequestUtil"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head> <title>Insert title here</title>
</head> <style type="text/css">
body {
font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
color: #666;
font-size: 13px;
white-space: nowrap;
}
img {
border: 0px;
vertical-align: middle;
}
#idshowTree input {
width: 13px;
height: 13px;
margin-right: 3px;
}
</style> <script type="text/javascript">
var xmlhttpReq;
//用于创建XMLHttpRequest对象
function createXmlHttp() {
//根据window.XMLHttpRequest对象是否存在使用不同的创建方式
if (window.XMLHttpRequest) {
xmlhttpReq = new XMLHttpRequest(); //FireFox、Opera等浏览器支持的创建方式
} else {
xmlhttpReq = new ActiveXObject("Microsoft.XMLHTTP");//IE浏览器支持的创建方式
}
}
//动态显示+、-号图片
function changeState(oDiv,iDivcode){
var object = document.getElementById("level"+iDivcode);
if(object.style.display=='none'){
object.style.display='block';
}else{
object.style.display='none';
}
if(oDiv.src.indexOf("images/minus.gif")>0) {
oDiv.src="images/plus.gif";
}else if (oDiv.src.indexOf("images/plus.gif")>0) {
oDiv.src="images/minus.gif";
}else if(oDiv.src.indexOf("images/minusbottom.gif")>0) {
oDiv.src="images/plusbottom.gif";
}else if(oDiv.src.indexOf("images/plusbottom.gif")>0) {
oDiv.src="images/minusbottom.gif";
}else if(oDiv.src.indexOf("images/nolines_plus.gif")>0) {
oDiv.src="images/nolines_minus.gif";
}else if(oDiv.src.indexOf("images/nolines_minus.gif")>0){
oDiv.src="images/nolines_plus.gif";
}
}
function initpage() {
createXmlHttp();
xmlhttpReq.open("GET","../../ButtCatalogServlet",true); //路径在我的机上运行可以显示,移到服务器就不行了
xmlhttpReq.send(null);
xmlhttpReq.onreadystatechange=function(){
if(xmlhttpReq.readyState==4) {
if(xmlhttpReq.status==200) {
var info =xmlhttpReq.responseText;
idshowTree.innerHTML=info;
}
}
}
}
/*
function $(id) {
return document.getElementById(id);
}
*/
function geturl() {
var id="";
var box=document.getElementsByName("checkbox");
var ename=document.getElementsByName("myename");
for(var i=0;i<box.length;i++)
{
if(box[i].checked)
{
id+=ename[i].value+"="+box[i].value + "&";
}
}
id=id.substring(0,id.length-1);
var url="buttarchive.jsp?"+id;
alert(url);
document.form1.action=url;
form1.submit();
}
</script>
</head>
<body onload="initpage();"> <%
String archiveId = RequestUtil.getString(request,"archiveId","0");
session.setAttribute("sessionid",archiveId);
%>
<form method="post" name="form1" action="">
<div id="idshowTree" >
</div>
<input type="submit" value="确定" onclick="geturl();">
<input type="reset" value="取消"> </form>
</body>
</html>
servlet代码:package com.tecamo.cms.buttcolumn;import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.tecamo.cms.util.JdbcUtil;public class ButtCatalogServlet extends HttpServlet {
private PrintWriter out;
private String sql="";
int divcode = 0;
String buttcolumnId="";
private static Connection conn = JdbcUtil.getConnection();
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
out = response.getWriter();
try {
// out.println("<img src='images/nolines_plus.gif' onclick='changeState(this,0)'>全部目录"
// + "<div id=level0 style='display:none' >");
generateTree(-1, 0);//从根目录向下查找,根目录的buttcolumnId为 -1
out.flush();
out.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
// 产生树结构
public void generateTree(int fatherid, int level) throws SQLException {
level++;
divcode++;
// Statement和ResultSet不要声明为全局变量,如果声明全局变量有可能会出现结果集耗尽
Statement st = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
sql ="select * from CMS_BUTTCOLUMN where FATHERID="+ fatherid
+"order by BUTTCOLUMNID asc";
ResultSet rs = st.executeQuery(sql);
while (rs.next()) {
for (int i = 0; i < level - 1; i++) { // 控制缩进
out.print("<img src='images/line.gif' />");
}
int buttcolumnId =rs.getInt("BUTTCOLUMNId");
String Name = rs.getString("NAME");
String ename=rs.getString("ENAME");
if (existedChild(buttcolumnId)
&& rs.isLast()&&fatherid==-1) {// 有下级目录,并且是最后一行
out.print("<img src='images/minus.gif' onclick='changeState(this,"+ divcode+ ")' /><input type='checkbox' name='checkbox' value='"+buttcolumnId+"'><font color='#000000'>"+ Name+"("+buttcolumnId+ ")</font><input type='hidden' name='myename' value='"+ename+"'><br />");
}
else if (existedChild(buttcolumnId)
&& rs.isLast()&&fatherid!=-1) {// 有下级目录,并且是最后一行
out.print("<img src='images/minus.gif' onclick='changeState(this,"+ divcode+ ")' /><input type='checkbox' name='checkbox' value='"+buttcolumnId+"'>"+ Name+ "("+buttcolumnId+ ")<input type='hidden' name='myename' value='"+ename+"'><br />");
}
else if (existedChild(buttcolumnId)
&& !rs.isLast()&&fatherid==-1) {
out .print("<img src='images/minus.gif' onclick='changeState(this,"+ divcode+ ")' /><input type='checkbox' name='checkbox' value='"+buttcolumnId+"'><font color='#000000'>"+ Name+ "("+buttcolumnId+ ")</font><input type='hidden' name='myename' value='"+ename+"'><br />");
}
else if (!existedChild(buttcolumnId) && rs.isLast()&&fatherid==-1) {// 没有下级目录,且是最后一行
out.print("<img src='images/joinbottom.gif' onclick='changeState(this,"+ divcode+ ")' /><input type='checkbox' name='checkbox' value='"+buttcolumnId+"'><font color='#000000'>"+Name+"("+buttcolumnId+ ")</font><input type='hidden' name='myename' value='"+ename+"'><br />");
}
else {
out.print("<img src='images/join.gif' onclick='changeState(this,"+ divcode+ ")' /><input type='checkbox' name='checkbox' value='"+buttcolumnId+"'>"+ Name+ "("+buttcolumnId+ ")<input type='hidden' name='myename' value='"+ename+"'><br />");
}
generateTree(buttcolumnId, level); // 递归调用,虽然又调用了函数generateTree,但是在概念上,我们应该把
// 它当作另外一个函数,每次当我们调用一个函数的时候--无论是递归调用
// 还是非递归调用,该函数都会得到自己独有的一组局部变量和形式变量
}
JdbcUtil.free(st, rs, null);
}
// 检查是否有下级部门
public boolean existedChild(int buttcolumnid) throws SQLException {
Statement st = null;
ResultSet rs = null;
st = conn.createStatement();
sql = "select * from CMS_BUTTCOLUMN where FATHERID=" + buttcolumnid+"order by BUTTCOLUMNID asc";
rs = st.executeQuery(sql);
boolean flag = rs.next();
JdbcUtil.free(st, rs, null);
return flag;
}
public void destroy() {
//当servlet被销毁时,才关闭数据库的连接
JdbcUtil.free(null, null, conn);
}
}web.xml <servlet>
<servlet-name>ButtCatalogServlet</servlet-name>
<servlet-class>com.tecamo.cms.buttcolumn.ButtCatalogServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ButtCatalogServlet</servlet-name>
<url-pattern>/ButtCatalogServlet</url-pattern>
</servlet-mapping> 郁闷了两天了,还没解决,哪位高手帮帮忙。没错误提示,就只有两个botton,目录没显示。
<%@page import="com.tecamo.cms.util.RequestUtil"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head> <title>Insert title here</title>
</head> <style type="text/css">
body {
font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
color: #666;
font-size: 13px;
white-space: nowrap;
}
img {
border: 0px;
vertical-align: middle;
}
#idshowTree input {
width: 13px;
height: 13px;
margin-right: 3px;
}
</style> <script type="text/javascript">
var xmlhttpReq;
//用于创建XMLHttpRequest对象
function createXmlHttp() {
//根据window.XMLHttpRequest对象是否存在使用不同的创建方式
if (window.XMLHttpRequest) {
xmlhttpReq = new XMLHttpRequest(); //FireFox、Opera等浏览器支持的创建方式
} else {
xmlhttpReq = new ActiveXObject("Microsoft.XMLHTTP");//IE浏览器支持的创建方式
}
}
//动态显示+、-号图片
function changeState(oDiv,iDivcode){
var object = document.getElementById("level"+iDivcode);
if(object.style.display=='none'){
object.style.display='block';
}else{
object.style.display='none';
}
if(oDiv.src.indexOf("images/minus.gif")>0) {
oDiv.src="images/plus.gif";
}else if (oDiv.src.indexOf("images/plus.gif")>0) {
oDiv.src="images/minus.gif";
}else if(oDiv.src.indexOf("images/minusbottom.gif")>0) {
oDiv.src="images/plusbottom.gif";
}else if(oDiv.src.indexOf("images/plusbottom.gif")>0) {
oDiv.src="images/minusbottom.gif";
}else if(oDiv.src.indexOf("images/nolines_plus.gif")>0) {
oDiv.src="images/nolines_minus.gif";
}else if(oDiv.src.indexOf("images/nolines_minus.gif")>0){
oDiv.src="images/nolines_plus.gif";
}
}
function initpage() {
createXmlHttp();
xmlhttpReq.open("GET","../../ButtCatalogServlet",true); //路径在我的机上运行可以显示,移到服务器就不行了
xmlhttpReq.send(null);
xmlhttpReq.onreadystatechange=function(){
if(xmlhttpReq.readyState==4) {
if(xmlhttpReq.status==200) {
var info =xmlhttpReq.responseText;
idshowTree.innerHTML=info;
}
}
}
}
/*
function $(id) {
return document.getElementById(id);
}
*/
function geturl() {
var id="";
var box=document.getElementsByName("checkbox");
var ename=document.getElementsByName("myename");
for(var i=0;i<box.length;i++)
{
if(box[i].checked)
{
id+=ename[i].value+"="+box[i].value + "&";
}
}
id=id.substring(0,id.length-1);
var url="buttarchive.jsp?"+id;
alert(url);
document.form1.action=url;
form1.submit();
}
</script>
</head>
<body onload="initpage();"> <%
String archiveId = RequestUtil.getString(request,"archiveId","0");
session.setAttribute("sessionid",archiveId);
%>
<form method="post" name="form1" action="">
<div id="idshowTree" >
</div>
<input type="submit" value="确定" onclick="geturl();">
<input type="reset" value="取消"> </form>
</body>
</html>
servlet代码:package com.tecamo.cms.buttcolumn;import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.tecamo.cms.util.JdbcUtil;public class ButtCatalogServlet extends HttpServlet {
private PrintWriter out;
private String sql="";
int divcode = 0;
String buttcolumnId="";
private static Connection conn = JdbcUtil.getConnection();
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
out = response.getWriter();
try {
// out.println("<img src='images/nolines_plus.gif' onclick='changeState(this,0)'>全部目录"
// + "<div id=level0 style='display:none' >");
generateTree(-1, 0);//从根目录向下查找,根目录的buttcolumnId为 -1
out.flush();
out.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
// 产生树结构
public void generateTree(int fatherid, int level) throws SQLException {
level++;
divcode++;
// Statement和ResultSet不要声明为全局变量,如果声明全局变量有可能会出现结果集耗尽
Statement st = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
sql ="select * from CMS_BUTTCOLUMN where FATHERID="+ fatherid
+"order by BUTTCOLUMNID asc";
ResultSet rs = st.executeQuery(sql);
while (rs.next()) {
for (int i = 0; i < level - 1; i++) { // 控制缩进
out.print("<img src='images/line.gif' />");
}
int buttcolumnId =rs.getInt("BUTTCOLUMNId");
String Name = rs.getString("NAME");
String ename=rs.getString("ENAME");
if (existedChild(buttcolumnId)
&& rs.isLast()&&fatherid==-1) {// 有下级目录,并且是最后一行
out.print("<img src='images/minus.gif' onclick='changeState(this,"+ divcode+ ")' /><input type='checkbox' name='checkbox' value='"+buttcolumnId+"'><font color='#000000'>"+ Name+"("+buttcolumnId+ ")</font><input type='hidden' name='myename' value='"+ename+"'><br />");
}
else if (existedChild(buttcolumnId)
&& rs.isLast()&&fatherid!=-1) {// 有下级目录,并且是最后一行
out.print("<img src='images/minus.gif' onclick='changeState(this,"+ divcode+ ")' /><input type='checkbox' name='checkbox' value='"+buttcolumnId+"'>"+ Name+ "("+buttcolumnId+ ")<input type='hidden' name='myename' value='"+ename+"'><br />");
}
else if (existedChild(buttcolumnId)
&& !rs.isLast()&&fatherid==-1) {
out .print("<img src='images/minus.gif' onclick='changeState(this,"+ divcode+ ")' /><input type='checkbox' name='checkbox' value='"+buttcolumnId+"'><font color='#000000'>"+ Name+ "("+buttcolumnId+ ")</font><input type='hidden' name='myename' value='"+ename+"'><br />");
}
else if (!existedChild(buttcolumnId) && rs.isLast()&&fatherid==-1) {// 没有下级目录,且是最后一行
out.print("<img src='images/joinbottom.gif' onclick='changeState(this,"+ divcode+ ")' /><input type='checkbox' name='checkbox' value='"+buttcolumnId+"'><font color='#000000'>"+Name+"("+buttcolumnId+ ")</font><input type='hidden' name='myename' value='"+ename+"'><br />");
}
else {
out.print("<img src='images/join.gif' onclick='changeState(this,"+ divcode+ ")' /><input type='checkbox' name='checkbox' value='"+buttcolumnId+"'>"+ Name+ "("+buttcolumnId+ ")<input type='hidden' name='myename' value='"+ename+"'><br />");
}
generateTree(buttcolumnId, level); // 递归调用,虽然又调用了函数generateTree,但是在概念上,我们应该把
// 它当作另外一个函数,每次当我们调用一个函数的时候--无论是递归调用
// 还是非递归调用,该函数都会得到自己独有的一组局部变量和形式变量
}
JdbcUtil.free(st, rs, null);
}
// 检查是否有下级部门
public boolean existedChild(int buttcolumnid) throws SQLException {
Statement st = null;
ResultSet rs = null;
st = conn.createStatement();
sql = "select * from CMS_BUTTCOLUMN where FATHERID=" + buttcolumnid+"order by BUTTCOLUMNID asc";
rs = st.executeQuery(sql);
boolean flag = rs.next();
JdbcUtil.free(st, rs, null);
return flag;
}
public void destroy() {
//当servlet被销毁时,才关闭数据库的连接
JdbcUtil.free(null, null, conn);
}
}web.xml <servlet>
<servlet-name>ButtCatalogServlet</servlet-name>
<servlet-class>com.tecamo.cms.buttcolumn.ButtCatalogServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ButtCatalogServlet</servlet-name>
<url-pattern>/ButtCatalogServlet</url-pattern>
</servlet-mapping> 郁闷了两天了,还没解决,哪位高手帮帮忙。没错误提示,就只有两个botton,目录没显示。
private static String url = "jdbc:oracle:thin:@192.168.40.100:1521:orcl";
private static String user = "xwcbj";
private static String password = "tecamo";
private JdbcUtil() {}
static {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
throw new ExceptionInInitializerError(e);
}
}
//获取数据库连接对象
public static Connection getConnection() {
try {
return DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
/**
* 关闭数据库连接
* @param st
* @param rs
* @param conn
*/
public static void free(Statement st, ResultSet rs, Connection conn) {
try {
if (st != null) st.close();
if (rs != null) rs.close();
if (conn != null) conn.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}