热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

通过数据库数据构建树结构(一)

在本教程中,我们将向我们介绍如何通过数据库中的数据动态地构建树结构。我们将使用NetBeansIDE6.0构建一个由两个页面组成的应用程序,其中第一页包含一个JSF1.2(Woodstock)树组件。接下来,我们将用数据库中的人物姓名填充树结构的一级节点,然

在本教程中,我们将向我们介绍如何通过数据库中的数据动态地构建树结构。我们将使用 NetBeans IDE 6.0 构建一个由两个页面组成的应用程序,其中第一页包含一个 JSF 1.2 ( Woodstock ) 树组件。接下来,我们将用数据库中的人物姓名填充树结构的一级节点,然

在本教程中,我们将向我们介绍如何通过数据库中的数据动态地构建树结构。我们将使用NetBeans IDE 6.0构建一个由两个页面组成的应用程序,其中第一页包含一个JSF 1.2Woodstock树组件。接下来,我们将用数据库中的人物姓名填充树结构的一级节点,然后用此人的行程信息来填充二级节点。TRIP节点将链接到第二个页面,其中显示该行程的详细信息。

目录

-

设计主页

-

连接数据库

-

通过数据库表构建树结构

-

添加详细信息页

-

添加代码

-

定义页面导航

-

更多功能:将Action方法与树节点绑定

-

关于树节点选择的注意事项



本教程将涉及以下技术和资源

JavaServer Faces组件/
Java EE
平台

1.2 with Java EE 5*
1.1 with J2EE 1.4

Travel数据库

必需

要利用NetBeans IDE 6.0Java EE 5的性能,我们需要一个与Java EE 5规范完全兼容的应用服务器,比如说Sun Java System Application Server 9GlassFish项目)。

本教程适用于GlassFish V2应用服务器。如果我们使用的是其他服务器,请参阅发行说明 常见问题解答 了解各类问题和解决途径。有关所支持的服务器和Java EE平台的详细信息,请参阅发行说明

设计主页

首先,我们将构建一个包含树组件和TRIP数据库表的主页。

  1. 创建一个新的Visual Web JSF应用程序项目,将其命名为DatabaseTree,然后启动Viual Web JSF框架。
  2. 从组件面板的Basic部分拖动一个树组件到页面上,键入“Travel信息”,然后按回车键。在“属性”窗口中,将id属性设置为displayTree,将clientSide属性设置为True

clientSide属性为True时,每个子节点(无论展开与否)都将发送给客户机,但它们只有在父节点展开时才可见。当clientSideFalse时,仅呈现那些展开的父节点的子节点。

  1. 选择Tree Node 1,单击鼠标右键,然后从弹出菜单中选择“删除”。

在本应用程序中,我们将通过编程填充树中的节点,因此不需要初始化由IDE创建的树节点。如果未移除该节点,则JSP标记属性中设置的值将优先于运行时设置,并且页面将显示节点。

  1. 从组件面板拖动一个“消息组”组件到页面的边缘位置,如页面的右上角。

连接数据库

接下来,将该页与Travel数据源中的数据库表相连接,然后使用查询编辑器修改用于检索数据的SQL查询,使游客的姓名按字母顺序显示,旅行日期按时间顺序显示。

  1. 打开“服务”窗口,展开数据库节点,然后验证是否已连接到Travel数据库。

如果Travel数据库的jdbc节点标记显示为断开,并且无法展开该节点,则表明IDE未连接到该数据库。要连接Travel数据库,请右键单击Travel数据库的jdbc节点,然后从弹出菜单中选择“连接”。如果出现“连接”对话框,在输入travel作为口令,选中“在此期间记住密码”,然后单击“确定”按钮。

注:如果我们使用的是Apache Tomcat应用服务器,请将derbyClient.jar文件复制到/common/lib目录,然后再尝试连接到该数据库。

  1. 展开Travel数据库的jdbc节点,然后展开“表”节点

  1. 将“TRIP”节点拖放到可视编辑器中。

导航窗口净土在页面1部分显示“tripDataProvider”节点,在“SessionBean1”部分显示“tripRowSet”节点。

  1. 在导航窗口中,展开“SessionBean1”节点,右键单击“tripRowSet”节点,然后选择“编辑SQL语句”。

在编辑区域将显示带有TRIP表格图的查询编辑器。

  1. 从“服务”窗口拖出“行程 > > 人员”节点,并将其放置在查询编辑器中的“TRIP”表图的旁边,如图3所示。

此时将出现另一个表图,且两个表图之间有链接或连接。

  1. 在“PERSON”表中,取消选中PERSONID复选框。
  2. 在查询编辑器的“设计网格”中,找到“TRAVEL.PERSON”表中的“NAME”行。单击“排序类型”单元格,然后从下拉列表中选择“升序”。

此操作将使数据库表中的名字按姓氏的字母顺序排列。

  1. 找到TRAVEL.TRIP表中的DEPDATE行。单击“排序类型”单元格,然后从下拉列表中选择“升序”。

此操作将行程日期按照从早到晚的顺序排列。

通过数据库表构建树结构

现在,我们已经在存储停息中添加了一个请求bean属性,可供应用程序的中两个页面使用。然后,我将在prerender()方法中添加代码,用于通过TRIPPERSON数据库表动态地构建树组件。

  1. 打开页面1,使导航窗口可见。在导航窗口中,右键单击RequestBean1节点,然后选择“编辑Java源代码”。
  2. 在“public class RequestBean1 extends AbstractRequestBean”构建函数中声明属性,如下所示:
private Integer personId;
  1. Java编辑器中单击鼠标右键,选择“重构 > 封装”字段。
  2. 在“封装字段”对话框中,选择创建gettersetter方法,如下图所示。确保变量声明中字段可见性为“私有”,存取器可见性是“公有”,然后单击“重构”按钮。

  1. Java编辑器中打开页面1然后找到prerender方法。用以下粗体显示的代码替换prerender方法的主体部分

代码示例1:页面1prerender方法

    public void prerender() {
        // If the Request Bean's personId is set, then
        // we just came back from the Trip page
        // and had displayed a selected trip.
        // We use the personId later to determine whether
        // to expand a person's node
        Integer expandedPersOnId= getRequestBean1().getPersonId();
        try {
            // Set up the variables we will need
            Integer currentPersOnId= new Integer(-1);
            // If nbrChildren is not 0 then this is a
            // postback and we have our tree already
            int nbrChildren = displayTree.getChildCount();
 
            if (nbrChildren == 0) {
                // List of outer (person) nodes
                List outerChildren = displayTree.getChildren();
                // Erase previous contents
                outerChildren.clear();
                // List of inner (trip) nodes
                List innerChildren = null;
                // Execute the SQL query
                tripDataProvider.refresh();
                // Iterate over the rows of the result set.
                // Every time we encounter a new person, add first level node.
                // Add second level trip nodes to the parent person node.
                boolean hasNext = tripDataProvider.cursorFirst();
                while (hasNext) {
                    Integer newPersOnId=
                            (Integer) tripDataProvider.getValue(
                            "TRIP.PERSONID");
                    if (!newPersonId.equals(currentPersonId)) {
                        currentPersOnId= newPersonId;
                        TreeNode persOnNode= new TreeNode();
                        personNode.setId("person" + newPersonId.toString());
                        personNode.setText(
                                (String)tripDataProvider.getValue(
                                "PERSON.NAME"));
                        // If the request bean passed a person id,
                        // expand that person's node
                        personNode.setExpanded(newPersonId.equals
                                (expandedPersonId));
                        outerChildren.add(personNode);
                        innerChildren = personNode.getChildren();
                    }
 
                    // Create a new trip node
                    TreeNode tripNode = new TreeNode();
                    tripNode.setId("trip" +
                            tripDataProvider.getValue("TRIP.TRIPID").toString());
                    tripNode.setText(
                            tripDataProvider.getValue("TRIP.DEPDATE").toString());
                    tripNode.setUrl("/faces/Trip.jsp?tripId=" +
                            tripDataProvider.getValue("TRIP.TRIPID").toString());
                    innerChildren.add(tripNode);
                    hasNext = tripDataProvider.cursorNext();
                }
            }
 
        } catch (Exception ex) {
            log("Exception gathering tree data", ex);
            error("Exception gathering tree data: " + ex);
        } 
     }
               


此代码读取按照personId排序的行程记录。对于每个personId,此代码会在树结构中创建一个新的一级节点。然后,为每一个与该personId关联的行程创建一个二级节点(嵌套节点)。最后,将二级行程节点与tripNode_action方法(稍后在本部分中创建)绑定在一起。

  1. 在源代码中单击鼠标右键,然后从弹出菜单中选择Fix Imports修复“无法找到类”的错误。在Fix All Imports对话框中,请确保java.util.List出现在列出的字段中,然后单击确定”按钮。
  2. 运行项目。

Web浏览器将打开并显示一个树组件,其中每个一级节点显示人名,如下图所示。展开节点可显示此人的旅行日期。请注意,人名按姓氏的字母顺序显示,日期按时间顺序显示。在下一节中,我们将添加一些代码,以便用户在单击Trip节点时导航至第二页。第二个页面将显示用户所选行程的详细信息。

添加详细信息页

现在,我们需要为应用程序添加第二个页面,如下图所示。此页使用“属性表单”组件动态地显示用户在第一页上所选行程的详细信息。


推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 分享css中提升优先级属性!important的用法总结
    web前端|css教程css!importantweb前端-css教程本文分享css中提升优先级属性!important的用法总结微信门店展示源码,vscode如何管理站点,ubu ... [详细]
  • 开发笔记:spring boot项目打成war包部署到服务器的步骤与注意事项
    本文介绍了将spring boot项目打成war包并部署到服务器的步骤与注意事项。通过本文的学习,读者可以了解到如何将spring boot项目打包成war包,并成功地部署到服务器上。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • 本文介绍了一个免费的asp.net控件,该控件具备数据显示、录入、更新、删除等功能。它比datagrid更易用、更实用,同时具备多种功能,例如属性设置、数据排序、字段类型格式化显示、密码字段支持、图像字段上传和生成缩略图等。此外,它还提供了数据验证、日期选择器、数字选择器等功能,以及防止注入攻击、非本页提交和自动分页技术等安全性和性能优化功能。最后,该控件还支持字段值合计和数据导出功能。总之,该控件功能强大且免费,适用于asp.net开发。 ... [详细]
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
  • 如何更改电脑系统的自动校时服务器地址?
    本文介绍了如何通过注册表编辑器更改电脑系统的自动校时服务器地址。通过修改注册表中的数值数据或新建字符串数值的方式,可以将默认的时钟同步服务器地址更改为自己所需要的域名或IP地址。详细步骤包括双击时间区域,点击internet时间,勾选自动校正域名设置定时等操作。 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • 本文介绍了禅道作为一款国产开源免费的测试管理工具的特点和功能,并提供了禅道的搭建和调试方法。禅道是一款B/S结构的项目管理工具,可以实现组织管理、后台管理、产品管理、项目管理和测试管理等功能。同时,本文还介绍了其他软件测试相关工具,如功能自动化工具和性能自动化工具,以及白盒测试工具的使用。通过本文的阅读,读者可以了解禅道的基本使用方法和优势,从而更好地进行测试管理工作。 ... [详细]
author-avatar
lty燕_654
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有