u012282767 2013-09-30 12:15 采纳率: 0%
浏览 1082

EXTJS动态加载树,后台JSP,为什么报错NO DATA FOUND呢?代码在下,多谢了!

代码:LoadTree.html

test3


<script type="text/javascript">
           var tree = new Ext.tree.TreePanel({
            loader : new Ext.tree.TreeLoader({
                dataUrl : 'tree.jsp?Did=00001'
            }),
            border : false,
            root : new Ext.tree.AsyncTreeNode({
                text : '集团',
                id : '00001'
            })
        });

        tree.on("beforeload", function(node) {
            tree.loader.dataUrl = 'tree.jsp?Did=' + node.id;
        });

        new Ext.Window({ //将树放在窗口中
            height : 200,
            width : 200,
            layout : 'fit',
            border : false,
            title : 'First Tree',
            items : tree
        }).show();
    });
</script>


代码:tree.jsp
<%@ page language="java" pageEncoding="GBK"%>
/jsp:useBean
<%
String PID = "";
if (request.getParameter("Did") != null) {
PID = request.getParameter("Did").toString();
JSONTree.setPID(PID);
} else {
JSONTree.setPID("00001");
}
%>
<%=JSONTree.getJSONString()%>

代码:JSONTree.java
package tree;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class JSONTree {
private String PID;

public String getJSONString() {
    Connection conn = null;
    Statement st = null;
    ResultSet rs = null;
    StringBuffer dataJson = new StringBuffer();
    String SQLString = "SELECT * FROM treeTabel WHERE sjgsdm=" + this.PID
            + " and yxbz = 'Y' ORDER BY gsdm";
    String Sql="select sjgsdm from treeTabel where yxbz ='Y'group by sjgsdm order by sjgsdm";
    //String Sql="select sjgsdm from treeTabel ";
    try {
        /** * 连接数据库 */
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        conn = DriverManager.getConnection(
                "Jdbc:Odbc:tree",
                "sa", "123456");
        st = conn.createStatement();
        rs = st.executeQuery(Sql);

        System.out.println(this.PID);
        StringBuffer parentIDBuffer = new StringBuffer();
        parentIDBuffer.append("|");
        //System.out.println(parentIDBuffer);
        while (rs.next()) {
            /** * 因数据库里有一个节点的父节点为空,所以这里要把空节点从父节点集合里去除 */
            if (rs.getString("sjgsdm").equals(" ")) {
                continue;
            }
            parentIDBuffer.append(rs.getString("sjgsdm"));
            parentIDBuffer.append("|");
            System.out.println(parentIDBuffer);
        }
        /** * 打印测试语句,查看所获取到的所有父节点有哪些 */
        System.out.println(parentIDBuffer);
        String s = parentIDBuffer.toString();
        rs = st.executeQuery(SQLString);
        dataJson.append("[");
        while (rs.next()) { // 判断是否为父节点
            if (s.indexOf("|" + rs.getString("gsdm") + "|") >= 0) {
                dataJson.append("{id:'" + rs.getString("gsdm") + "',text:'"
                        + rs.getString("shortname") + "',leaf:false}");
            } else {
                dataJson.append("{id:'" + rs.getString("gsdm") + "',text:'"
                        + rs.getString("shortname") + "',leaf:true}");
            }
            /**
             * * 判断是否为最后一条记录,因Json里不同的{}之间要有一个','这个符号,但在最后一条记录时不需要加此符号,故有此判断
             */
            if (rs.isLast()) {
                System.out.println(rs.getString("shortname"));
                continue;
            }
            dataJson.append(",");
        }
        dataJson.append("]");
        /** * 打印测试语句,查看json对象的字符串是什么样,是否符合要求 */
        System.out.println(dataJson);
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            rs.close();
            st.close();
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    // 返回JSON数据
    return dataJson.toString();
}

public String getPID() {
    return PID;
}

public void setPID(String pid) {
    PID = pid;
}

}

数据表:sjgsdm yxbz gsdm shortname 都是char型 其中sjgsdm为父节点 yxbz为子节点

多谢大家了!我是新学EXTJS的 需要大家的帮助!

  • 写回答

1条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-02-24 14:02
    关注

    该回答引用ChatGPT

    根据您提供的代码,可能有以下原因导致“NO DATA FOUND”错误:

    • 数据库连接问题:您使用的是JdbcOdbcDriver驱动,这个驱动需要配置ODBC数据源。请确保您的ODBC数据源已正确配置,并且连接成功。
    • SQL语句问题:您在SQL语句中使用了this.PID,但在JSONTree类中并没有初始化PID属性。因此,可能需要在JSONTree构造函数中初始化PID属性。例如:

      public JSONTree(String pid) {
      this.PID = pid;
      }
      

      然后在tree.jsp中使用:

      JSONTree tree = new JSONTree(PID);
      <%= tree.getJSONString() %>
      
    • SQL语句问题:在SQL语句中,sjgsdm是char型,但在SQL语句中未将它用单引号括起来。因此,需要将SQL语句中的sjgsdm改为:

      SQLString = "SELECT * FROM treeTabel WHERE sjgsdm='" + this.PID + "' and yxbz = 'Y' ORDER BY gsdm";
      
    • 节点文本问题:在JSONTree类中,您从数据库中获取了节点的shortname,但这个shortname可能包含特殊字符,需要使用JavaScript的escape函数进行转义。例如:

      dataJson.append("{id:'" + rs.getString("gsdm") + "',text:'" + escape(rs.getString("shortname")) + "',leaf:false}");
      

    尝试解决以上问题后,如果仍然无法解决问题,请检查服务器端是否有其他错误,并确保数据表中有符合要求的数据。

    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!