偶是菜鸟,copy了别人的一个树的代码,遇到不能解决的问题了,请高手帮忙,谢谢!
类似 MSDN CSDN 导航树效果,JSP + JavaScript 实现!
表tree共有三列:id,parentid,re均为字符型、长度30
源代码附在后面,共两个jsp页面:Tree.jsp和subtree.jsp
问题:当我数据库里的列id和parentid均为数字时,没有任何问题;但混合进字母后就提示错误如下:
HTTP Status 500 -
--------------------------------------------------------------------------------type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception javax.servlet.ServletException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]? varchar ? '100a ' ???????? int ??????????
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:867)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:800)
org.apache.jsp.subtree_jsp._jspService(subtree_jsp.java:105)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)root cause java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]? varchar ? '100a ' ???????? int ??????????
com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
com.microsoft.jdbc.sqlserver.tds.TDSRequest.processErrorToken(Unknown Source)
com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReplyToken(Unknown Source)
com.microsoft.jdbc.sqlserver.tds.TDSExecuteRequest.processReplyToken(Unknown Source)
com.microsoft.jdbc.sqlserver.tds.TDSRequest.getRow(Unknown Source)
com.microsoft.jdbc.sqlserver.SQLServerImplResultSet.positionCursor(Unknown Source)
com.microsoft.jdbc.base.BaseResultSet.next(Unknown Source)
org.apache.jsp.subtree_jsp._jspService(subtree_jsp.java:70)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)note The full stack trace of the root cause is available in the Tomcat logs.--------------------------------------------------------------------------------Apache Tomcat/5.0.19下面是具体代码:
<!-- Tree.jsp -->
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.*;"%>
<!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="">
</HEAD>
<BODY>
<iframe width="100%" height="100" id="hiddenframe"></iframe>
<script>
function ExpandNode(ParentNode,ParentId){
var NodeX = eval(ParentNode.id + '_0');
if (NodeX.style.display == 'none')
{
NodeX.style.display="block";
if (NodeX.loaded == 'no')
{
document.frames['hiddenframe'].location.replace("subtree.jsp?PID=" + ParentId + "&PNode=" + ParentNode.id);
NodeX.loaded = 'yes';
}
}
else
{
NodeX.style.display='none';
}
}
</script>
<CENTER>
<TABLE border="1" width="20%" height="60%">
<TR>
<TD>
<DIV style="OVERFLOW: auto;WIDTH: 100%;HEIGHT: 100%">
<TABLE width="300%">
<TR>
<TD><%
java.sql.Connection conn = new lxdLr.data.ConnecttoDB().getConnection();
java.sql.PreparedStatement pstmt = conn.prepareStatement("select *,(select count(*) from tree where parentid = T.id) as children from tree T where parentid = '0'");
java.sql.ResultSet ResultSetX = pstmt.executeQuery();
// 根据查询的结果,构建主键对象,并放入集合
int i=0;
int children;
String ID;
while (ResultSetX.next())
{
children=ResultSetX.getInt("children");
ID=ResultSetX.getString("id");
%>
<div id='Node_<%= i %>'><a href='#'
<% if (children >0)
{%>
onClick='ExpandNode(Node_<%= i %>,<%=ID %>)'>+</a>
<%;}
else {%>
>-</a><%;}%>
<a href='#'
<% if (children >0)
{%>
onDblClick='ExpandNode(Node_<%= i %>,<%=ID%>)'
<%} %>
>
<%=ResultSetX.getString("re")%></a>
</div>
<div id='Node_<%= i %>_0' style='display: none' loaded='no'>
正在加载 ...
</div>
<%
i++;
}
%>
</BODY>
</HTML>
<!-- SubTree.jsp -->
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.*;"%>
<!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="">
</HEAD>
<%
String ParentNode = request.getParameter("PNode");
int i;
int j;
String nSpace="";
j= ParentNode.length()- ParentNode.replaceAll("_","").length();
for (i=0;i<j;i++)
nSpace = nSpace + " ";
String sHTML ="";
i=0;
//连接数据库
java.sql.Connection conn = new lxdLr.data.ConnecttoDB().getConnection();
java.sql.PreparedStatement pstmt = conn.prepareStatement("select *,(select count(*) from tree where parentid =T.id ) as Children from tree T where parentid = '" + request.getParameter("PID")+"'");
java.sql.ResultSet ResultSetX = pstmt.executeQuery();
int children;
String ID;
while (ResultSetX.next())
{ children=ResultSetX.getInt("children");
ID=ResultSetX.getString("id");
sHTML = sHTML + "<div id='" + ParentNode + "_" + (i + 1) + "'>" + nSpace + "<a href='#'";
if (children >0)
sHTML = sHTML + " onClick='ExpandNode(" + ParentNode + "_" + (i + 1) + "," + ID + ")'>+";
else sHTML = sHTML + ">-";
sHTML = sHTML + "</a>\\n" + "<a href='#'";
if (children >0)
sHTML = sHTML + " onDblClick='ExpandNode(" + ParentNode + "_" + (i + 1) + "," + ID + ")'";
sHTML = sHTML + ">" + ID + ": " + ResultSetX.getString("re") + "</a></div>";
if (children >0)
sHTML = sHTML + "<div id='" + ParentNode + "_" + (i + 1) + "_0' style='display: none' loaded='no'>" + nSpace + " 正在加载 ...</div>";
%>
<% i++;
}%>
<BODY>
<script>
var x = eval('parent.' + '<%= ParentNode + "_0"%>' ) ;
x.innerHTML="<%= sHTML %>";
</script>
</BODY>
</HTML>
类似 MSDN CSDN 导航树效果,JSP + JavaScript 实现!
表tree共有三列:id,parentid,re均为字符型、长度30
源代码附在后面,共两个jsp页面:Tree.jsp和subtree.jsp
问题:当我数据库里的列id和parentid均为数字时,没有任何问题;但混合进字母后就提示错误如下:
HTTP Status 500 -
--------------------------------------------------------------------------------type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception javax.servlet.ServletException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]? varchar ? '100a ' ???????? int ??????????
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:867)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:800)
org.apache.jsp.subtree_jsp._jspService(subtree_jsp.java:105)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)root cause java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]? varchar ? '100a ' ???????? int ??????????
com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
com.microsoft.jdbc.sqlserver.tds.TDSRequest.processErrorToken(Unknown Source)
com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReplyToken(Unknown Source)
com.microsoft.jdbc.sqlserver.tds.TDSExecuteRequest.processReplyToken(Unknown Source)
com.microsoft.jdbc.sqlserver.tds.TDSRequest.getRow(Unknown Source)
com.microsoft.jdbc.sqlserver.SQLServerImplResultSet.positionCursor(Unknown Source)
com.microsoft.jdbc.base.BaseResultSet.next(Unknown Source)
org.apache.jsp.subtree_jsp._jspService(subtree_jsp.java:70)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)note The full stack trace of the root cause is available in the Tomcat logs.--------------------------------------------------------------------------------Apache Tomcat/5.0.19下面是具体代码:
<!-- Tree.jsp -->
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.*;"%>
<!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="">
</HEAD>
<BODY>
<iframe width="100%" height="100" id="hiddenframe"></iframe>
<script>
function ExpandNode(ParentNode,ParentId){
var NodeX = eval(ParentNode.id + '_0');
if (NodeX.style.display == 'none')
{
NodeX.style.display="block";
if (NodeX.loaded == 'no')
{
document.frames['hiddenframe'].location.replace("subtree.jsp?PID=" + ParentId + "&PNode=" + ParentNode.id);
NodeX.loaded = 'yes';
}
}
else
{
NodeX.style.display='none';
}
}
</script>
<CENTER>
<TABLE border="1" width="20%" height="60%">
<TR>
<TD>
<DIV style="OVERFLOW: auto;WIDTH: 100%;HEIGHT: 100%">
<TABLE width="300%">
<TR>
<TD><%
java.sql.Connection conn = new lxdLr.data.ConnecttoDB().getConnection();
java.sql.PreparedStatement pstmt = conn.prepareStatement("select *,(select count(*) from tree where parentid = T.id) as children from tree T where parentid = '0'");
java.sql.ResultSet ResultSetX = pstmt.executeQuery();
// 根据查询的结果,构建主键对象,并放入集合
int i=0;
int children;
String ID;
while (ResultSetX.next())
{
children=ResultSetX.getInt("children");
ID=ResultSetX.getString("id");
%>
<div id='Node_<%= i %>'><a href='#'
<% if (children >0)
{%>
onClick='ExpandNode(Node_<%= i %>,<%=ID %>)'>+</a>
<%;}
else {%>
>-</a><%;}%>
<a href='#'
<% if (children >0)
{%>
onDblClick='ExpandNode(Node_<%= i %>,<%=ID%>)'
<%} %>
>
<%=ResultSetX.getString("re")%></a>
</div>
<div id='Node_<%= i %>_0' style='display: none' loaded='no'>
正在加载 ...
</div>
<%
i++;
}
%>
</BODY>
</HTML>
<!-- SubTree.jsp -->
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.*;"%>
<!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="">
</HEAD>
<%
String ParentNode = request.getParameter("PNode");
int i;
int j;
String nSpace="";
j= ParentNode.length()- ParentNode.replaceAll("_","").length();
for (i=0;i<j;i++)
nSpace = nSpace + " ";
String sHTML ="";
i=0;
//连接数据库
java.sql.Connection conn = new lxdLr.data.ConnecttoDB().getConnection();
java.sql.PreparedStatement pstmt = conn.prepareStatement("select *,(select count(*) from tree where parentid =T.id ) as Children from tree T where parentid = '" + request.getParameter("PID")+"'");
java.sql.ResultSet ResultSetX = pstmt.executeQuery();
int children;
String ID;
while (ResultSetX.next())
{ children=ResultSetX.getInt("children");
ID=ResultSetX.getString("id");
sHTML = sHTML + "<div id='" + ParentNode + "_" + (i + 1) + "'>" + nSpace + "<a href='#'";
if (children >0)
sHTML = sHTML + " onClick='ExpandNode(" + ParentNode + "_" + (i + 1) + "," + ID + ")'>+";
else sHTML = sHTML + ">-";
sHTML = sHTML + "</a>\\n" + "<a href='#'";
if (children >0)
sHTML = sHTML + " onDblClick='ExpandNode(" + ParentNode + "_" + (i + 1) + "," + ID + ")'";
sHTML = sHTML + ">" + ID + ": " + ResultSetX.getString("re") + "</a></div>";
if (children >0)
sHTML = sHTML + "<div id='" + ParentNode + "_" + (i + 1) + "_0' style='display: none' loaded='no'>" + nSpace + " 正在加载 ...</div>";
%>
<% i++;
}%>
<BODY>
<script>
var x = eval('parent.' + '<%= ParentNode + "_0"%>' ) ;
x.innerHTML="<%= sHTML %>";
</script>
</BODY>
</HTML>
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货