首页 数据库 mysql教程 通过数据库数据构建树结构(二)

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

Jun 07, 2016 pm 03:41 PM
单击 右键 打开 数据 数据库 窗口 结构 通过 项目

打开项目窗口,右键单击Web页节点,然后从弹出菜单中选择新建 可视化 Web JSF 页。将新页命名为Trip。 打开服务窗口,然后将表 TRIP 节点拖放到Trip页的可视 编辑器上。 导航窗口将在 Trip 部分显示 tripDataProvider 节点 , 在 SessionBean1 部分中显示 tr

打开“项目”窗口,右键单击“Web页”节点,然后从弹出菜单中选择“新建>可视化Web JSF页”。将新页命名为Trip。

打开“服务”窗口,然后将“表> TRIP 节点”拖放到Trip页的可视编辑器上。

导航窗口将在“Trip”部分显示“tripDataProvider”节点“SessionBean1”部分中显示“tripRowSet1”节点。

在导航窗口中,右键单击“tripRowSet1”节点,然后选择“编辑SQL语句”。

在查询编辑器的“设计网格”中,右键单击TRIPID行中的任意单元格,然后选择“添加查询条件”。在对话框中,将“比较”下拉列表设置为“= 等于”,然后选中“参数”单选按钮。单击“确定”按钮。

我们可以在TRIPID<span>“</span>条件列中看到“= ?”,并在SQL查询中添加以下WHERE子句

<span><font><font>WHERE TRAVEL.TRIP.TRIPID = ? <p></p></font></font></span>
登录后复制

在可视编辑器中打开Trip页。从组件面板的Basic部分拖动一个“超级链接”组件到页面上,键入<span>“主页”,然后按回车键。</span>

在超级链接组件的<span>“</span>属性窗口中单击action属性的省略号 按钮然后从下拉列表中选择<span>hyperlink1_action</span>单击<span>“</span>确定”按钮

IDE会将<span>hyperlink1_action</span>事件处理程序添加到Java源代码中。

从组件面板拖动一个“消息组”组件到页面上,然后将其放在“超级链接”组件的右侧。

从组件面板的“布局”部分拖动一个“属性表单”组件到页面上,然后将它放在“超级链接”组件的下面。

“属性表单”组件提供了一个设置行程信息布局的容器。“属性表单”组件包含了一个“属性表单部分”,而该部分又包含一个“属性”组件。

选择“属性表单部分1”。在“属性”窗口中,将label属性设置为Trip Details。

注:

<span>“</span>概要窗口中展开“propertySheet1>div1”节点,然后选择“property1”节点。在<span>“</span>属性窗口中<span>label</span><span>属性设置为</span><span>“</span><span>启程日期</span><span>:”,</span>然后按回车键。

在“概要”窗口中,选择“div1”,然后单击鼠标右键,从弹出菜单中选择“添加属性”。在“属性”窗口中,将<span>label属性设置为“出发城市:”,</span>然后按回车键。

从组件面板拖放一个“静态文本”组件到“概要”窗口的“property1”节点上。

该静态文本将成为property1的一个子节点。同时该静态文本还将出现在可视编辑器中。

TRIP.DEPDAT,然后单击“确定”。

当前日期会出现在可视编辑器的静态文本组件中。

 

添加静态文本组件到property2中,然后将静态文本绑定到TRIP.DEPCITY

添加代码

    现在,我们将添加一些代码,以便Trip页可以获取存储在页面1中的tripid,同时页面1也可以获取存储在Trip页中的personid。

Java 编辑器中打开Trip页,然后找到<span>prerender</span>方法。添加以下粗体显示的代码,使得该方法可以获取存储在页面1中的tripId。

代码示例2:Trip页中的prerender方法

<span><font><font><span>    </span>public void prerender() {<p></p></font></font></span>
登录后复制
<span><p><font> </font></p></span>
登录后复制
登录后复制
<span><font><font><span>        </span>// Get the person id from the request parameters<p></p></font></font></span>
登录后复制
<span><font><font><span>        </span>String parmTripId = (String)<p></p></font></font></span>
登录后复制
<span><font><font><span>        </span>getExternalContext().getRequestParameterMap().get("tripId");<p></p></font></font></span>
登录后复制
<span><p><font> </font></p></span>
登录后复制
登录后复制
<span><font><font><span>        </span>if (parmTripId != null) {<p></p></font></font></span>
登录后复制
<span><font><font><span>            </span>Integer tripId = new Integer(parmTripId);<p></p></font></font></span>
登录后复制
<span><font><font><span>            </span>try {<p></p></font></font></span>
登录后复制
<span><font><font><span>                </span>getSessionBean1().getTripRowSet1().setObject(1, tripId);<p></p></font></font></span>
登录后复制
<span><font><font><span>  </span><span>              </span>tripDataProvider.refresh();<p></p></font></font></span>
登录后复制
<span><font><font><span>            </span>} catch (Exception e) {<p></p></font></font></span>
登录后复制
<span><font><font><span>                </span>error("Cannot display trip " + tripId);<p></p></font></font></span>
登录后复制
<span><font><font><span>                </span>log("Cannot display trip " + tripId, e);<p></p></font></font></span>
登录后复制
<span><font><font><span>            </span>}<p></p></font></font></span>
登录后复制
<span><font><font><span>        </span>}else {<p></p></font></font></span>
登录后复制
<span><font><font><span>            </span>error("No trip id specified.");<p></p></font></font></span>
登录后复制
<span><font><font><span>        </span>}<p></p></font></font></span>
登录后复制
<span><font><font><span>     </span>}<p></p></font></font></span>
登录后复制
<span><font><font><span>                  </span><p></p></font></font></span>
登录后复制
登录后复制
登录后复制


<span>setObject方法</span>将行程查询的第一个参数设置为tripId。也就是说,该方法将查询中的?替换为 tripId。此查询只有一个参数,因此我们只需调用<span>setObject</span>一次。对<span>tripDataProvider1.refresh()的调用</span>会同时调用<span>CachedRowSet.release()</span>,并且重置CachedRowSetDataProvider的光标。但是此时不会执行CachesRowSet

找到<span>hyperlink1_action方法。</span>添加以下粗体显示的代码,将personId传递给页面1:

代码示例3:Trip页的hyperlink1_action方法

<span><font><font><span>    </span>public String hyperlink1_action() {<p></p></font></font></span>
登录后复制
<span><font><font><span>        </span>getRequestBean1().setPersonId(<p></p></font></font></span>
登录后复制
<span><font><font><span>                </span>(Integer)tripDataProvider.getValue("trip.personid"));<p></p></font></font></span>
登录后复制
<span><font><font><span>        </span>return null;<p></p></font></font></span>
登录后复制
<span><font><font><span>    </span>}<p></p></font></font></span>
登录后复制
<span><font><font><span>    </span><span>           </span><p></p></font></font></span>
登录后复制

定义页面导航

    最后,指定页面1上的树节点与Trip页之间的导航。

在可视编辑器的设计视图中的任意位置单击鼠标右键,选择“页面导航”。

Page1.jsp图标上单击连接器接口,然后拖动一条连线到Trip.jsp图标。

展开Trip.jsp图标,然后从“超级链接”组件拖动一条连线到Page1.jsp图标。页面导航设置。

 

运行该应用程序。在主页上,展开游客的姓名,然后单击某个旅行日期。

此时将打开Trip页打开,其中包含该行程的详细信息。

 

Trip页中,单击“主页”链接。请注意,在主页上我们选择的最后一个行程的一级节点仍处于展开状态。

通过展开和折叠一级树节点并单击旅行日期,我们可以继续浏览该应用程序。

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

    如果我们使用的是JavaServer Faces 1.2树组件也就是说项目的Java EE版本设置为Java EE 5平台),则可以将action方法与树节点绑定并且通过在action方法中调用树组件的<span>getSelected()</span>方法可以确定单击的是哪个节点如以下步骤所示。

添加一个tripId属性到Integer类型的Request Bean中。

将以下方法添加页面1的Java源代码中:

代码示例4:页面1的tripNode_action方法

<span><font><font><span>   </span>public String tripNode_action() {<p></p></font></font></span>
登录后复制
<span><font><font><span>       </span>// Get the id of the currently selected tree node<p></p></font></font></span>
登录后复制
<span><font><font><span>       </span>String nodeId = displayTree.getSelected();<p></p></font></font></span>
登录后复制
<span><font><font><span>       </span>// Find the tree node component with the given id<p></p></font></font></span>
登录后复制
<span><font><font><span>       </span>TreeNode selectedNode =<p></p></font></font></span>
登录后复制
<span><font><font><span>               </span>(TreeNode) this.getForm1().findComponentById(nodeId);<p></p></font></font></span>
登录后复制
<span><font><font><span>         </span>try {<p></p></font></font></span>
登录后复制
<span><font><font><span>           </span>// Node's id property is composed of "trip" plus the trip id<p></p></font></font></span>
登录后复制
<span><font><font><span>           </span>// Extract the trip id and save it for the next page<p></p></font></font></span>
登录后复制
<span><font><font><span>           </span>Integer tripId = Integer.valueOf(selectedNode.getId().substring(4));<p></p></font></font></span>
登录后复制
<span><font><font><span>           </span>getRequestBean1().setTripId(tripId);<p></p></font></font></span>
登录后复制
<span><font><font><span>       </span>} catch (Exception e) {<p></p></font></font></span>
登录后复制
<span><font><font><span>           </span>error("Can't convert node id to Integer: " +<p></p></font></font></span>
登录后复制
<span><font><font><span>           </span><span>        </span>selectedNode.getId().substring(4));<p></p></font></font></span>
登录后复制
<span><font><font><span>           </span>return null;<p></p></font></font></span>
登录后复制
<span><font><font><span>       </span>}<p></p></font></font></span>
登录后复制
<span><font><font><span>       </span>return "case1";<p></p></font></font></span>
登录后复制
<span><font><font><span>   </span>}<p></p></font></font></span>
登录后复制
登录后复制
<span><font><font><span>                  </span><p></p></font></font></span>
登录后复制
登录后复制
登录后复制

在页面1的<span>prerender方法中,将以下代码替换为代码示例5中的代码。</span>

<span><font><font><span>     </span>tripNode.setUrl("/faces/Trip.jsp?tripId=" +<p></p></font></font></span>
登录后复制
<span><font><font><span>            </span>tripDataProvider.getValue("TRIP.TRIPID").toString());<span>  </span><p></p></font></font></span>
登录后复制

代码示例5:调整Prerender方法

<span><font><font><span>    </span>ExpressionFactory exFactory =<p></p></font></font></span>
登录后复制
<span><font><font><span>       </span>getApplication().getExpressionFactory();<p></p></font></font></span>
登录后复制
<span><font><font><span>    </span>ELContext elContext =<p></p></font></font></span>
登录后复制
<span><font><font><span>       </span>getFacesContext().getELContext();<p></p></font></font></span>
登录后复制
<span><font><font><span>    </span>tripNode.setActionExpression(<p></p></font></font></span>
登录后复制
<span><font><font><span>       </span>exFactory.createMethodExpression(<p></p></font></font></span>
登录后复制
<span><font><font><span>       </span>elContext, "#{Page1.tripNode_action}",<p></p></font></font></span>
登录后复制
<span><font><font><span>                  </span>String.class, new Class>[0]));<p></p></font></font></span>
登录后复制

按Alt-Shift-F组合键来修复导入。

在Trip页的<span>prerender()方法中,将主体替换为以下代码:</span>

代码示例6:Trip页的prerender方法

<span><font><font><span>   </span>public void prerender() {<p></p></font></font></span>
登录后复制
<span><font><font><span>        </span><span>  </span>Integer tripId =<span>  </span>getRequestBean1().getTripId();<p></p></font></font></span>
登录后复制
<span><font><font><span>             </span>try {<p></p></font></font></span>
登录后复制
<span><font><font><span>               </span>getSessionBean1().getTripRowSet1().setObject(1, tripId);<p></p></font></font></span>
登录后复制
<span><font><font><span>               </span>tripDataProvider1.refresh();<p></p></font></font></span>
登录后复制
<span><font><font><span>           </span>} catch (Exception e) {<p></p></font></font></span>
登录后复制
<span><font><font><span>               </span>error("Cannot display trip " + tripId);<p></p></font></font></span>
登录后复制
<span><font><font><span>      </span><span>         </span>log("Cannot display trip " + tripId, e);<p></p></font></font></span>
登录后复制
<span><font><font><span>           </span>}<p></p></font></font></span>
登录后复制
<span><font><font><span>   </span>}<p></p></font></font></span>
登录后复制
登录后复制
<span><font><font><span>                  </span><p></p></font></font></span>
登录后复制
登录后复制
登录后复制

运行应用程序。

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

    如果我们的项目是J2EE 1.4项目,则在选择树节点时应注意以下一些事项:

JavaServer Faces 1.1树组件无法使用<span>getSelected</span><span>方法或</span><span>getCookieSelectedTreeNode</span><span>方法来确定我们选择的是哪个节点。</span>如果用户禁用了浏览器中的cookie那么这些方法将不能返回到正确值。另外,对于开启cookies的浏览器,用户第一次访问页面并单击某个节点时,cokkie 可能会返回错误值。如果浏览器中有前一次访问时遗留的cookie信息,则有可能返回前一次选定的值。由于在JavaServer Faces 1.2版本中,树组件不使用cookie来保存选定的信息,所以1.2版本中不存在上述问题。

树节点的突出显示部分不在两个会话之间被清除。如果多次运行本教程中的程序,则上次会话中选择的节点将在页面刚打开时突出显示在新会话中。这个问题是由于使用cookie来传输选定的节点ID而造成的。

结束语

    在本教程中,我们通过数据库数据构建了一个树结构。我们构建了一个由两个页面组成的应用程序,其中第一页包含一个树组件。我们将数据库中的名字填充到树结构的一级节点,然后用此人的行程来填充二级节点。然后我们将第一页上的每个行程链接到第二页,在第二页中显示了该行程的详细信息。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

iPhone上的蜂窝数据互联网速度慢:修复 iPhone上的蜂窝数据互联网速度慢:修复 May 03, 2024 pm 09:01 PM

在iPhone上面临滞后,缓慢的移动数据连接?通常,手机上蜂窝互联网的强度取决于几个因素,例如区域、蜂窝网络类型、漫游类型等。您可以采取一些措施来获得更快、更可靠的蜂窝互联网连接。修复1–强制重启iPhone有时,强制重启设备只会重置许多内容,包括蜂窝网络连接。步骤1–只需按一次音量调高键并松开即可。接下来,按降低音量键并再次释放它。步骤2–该过程的下一部分是按住右侧的按钮。让iPhone完成重启。启用蜂窝数据并检查网络速度。再次检查修复2–更改数据模式虽然5G提供了更好的网络速度,但在信号较弱

超级智能体生命力觉醒!可自我更新的AI来了,妈妈再也不用担心数据瓶颈难题 超级智能体生命力觉醒!可自我更新的AI来了,妈妈再也不用担心数据瓶颈难题 Apr 29, 2024 pm 06:55 PM

哭死啊,全球狂炼大模型,一互联网的数据不够用,根本不够用。训练模型搞得跟《饥饿游戏》似的,全球AI研究者,都在苦恼怎么才能喂饱这群数据大胃王。尤其在多模态任务中,这一问题尤为突出。一筹莫展之际,来自人大系的初创团队,用自家的新模型,率先在国内把“模型生成数据自己喂自己”变成了现实。而且还是理解侧和生成侧双管齐下,两侧都能生成高质量、多模态的新数据,对模型本身进行数据反哺。模型是啥?中关村论坛上刚刚露面的多模态大模型Awaker1.0。团队是谁?智子引擎。由人大高瓴人工智能学院博士生高一钊创立,高

美国空军高调展示首个AI战斗机!部长亲自试驾全程未干预,10万行代码试飞21次 美国空军高调展示首个AI战斗机!部长亲自试驾全程未干预,10万行代码试飞21次 May 07, 2024 pm 05:00 PM

最近,军事圈被这个消息刷屏了:美军的战斗机,已经能由AI完成全自动空战了。是的,就在最近,美军的AI战斗机首次公开,揭开了神秘面纱。这架战斗机的全名是可变稳定性飞行模拟器测试飞机(VISTA),由美空军部长亲自搭乘,模拟了一对一的空战。5月2日,美国空军部长FrankKendall在Edwards空军基地驾驶X-62AVISTA升空注意,在一小时的飞行中,所有飞行动作都由AI自主完成!Kendall表示——在过去的几十年中,我们一直在思考自主空对空作战的无限潜力,但它始终显得遥不可及。然而如今,

特斯拉机器人进厂打工,马斯克:手的自由度今年将达到22个! 特斯拉机器人进厂打工,马斯克:手的自由度今年将达到22个! May 06, 2024 pm 04:13 PM

特斯拉机器人Optimus最新视频出炉,已经可以在厂子里打工了。正常速度下,它分拣电池(特斯拉的4680电池)是这样的:官方还放出了20倍速下的样子——在小小的“工位”上,拣啊拣啊拣:这次放出的视频亮点之一在于Optimus在厂子里完成这项工作,是完全自主的,全程没有人为的干预。并且在Optimus的视角之下,它还可以把放歪了的电池重新捡起来放置,主打一个自动纠错:对于Optimus的手,英伟达科学家JimFan给出了高度的评价:Optimus的手是全球五指机器人里最灵巧的之一。它的手不仅有触觉

单卡跑Llama 70B快过双卡,微软硬生生把FP6搞到了A100里 | 开源 单卡跑Llama 70B快过双卡,微软硬生生把FP6搞到了A100里 | 开源 Apr 29, 2024 pm 04:55 PM

FP8和更低的浮点数量化精度,不再是H100的“专利”了!老黄想让大家用INT8/INT4,微软DeepSpeed团队在没有英伟达官方支持的条件下,硬生生在A100上跑起FP6。测试结果表明,新方法TC-FPx在A100上的FP6量化,速度接近甚至偶尔超过INT4,而且拥有比后者更高的精度。在此基础之上,还有端到端的大模型支持,目前已经开源并集成到了DeepSpeed等深度学习推理框架中。这一成果对大模型的加速效果也是立竿见影——在这种框架下用单卡跑Llama,吞吐量比双卡还要高2.65倍。一名

发布几小时,微软秒删媲美GPT-4开源大模型!竟因忘记投毒测试 发布几小时,微软秒删媲美GPT-4开源大模型!竟因忘记投毒测试 Apr 23, 2024 pm 05:22 PM

上周,微软空降了一个堪称GPT-4级别的开源模型WizardLM-2。却没想到发布几小时之后,立马被删除了。有网友突然发现,WizardLM的模型权重、公告帖子全部被删除,并且不再微软集合中,除了提到站点之外,却找不到任何证据证明这个微软的官方项目。GitHub项目主页已成404。项目地址:https://wizardlm.github.io/包括模型在HF上的权重,也全部消失了.....全网满脸疑惑,WizardLM怎么没了?然鹅,微软之所以这么做,是因为团队内部忘记对模型做「测试」。随后,微

Open-Sora全面开源升级:支持16s视频生成和720p分辨率 Open-Sora全面开源升级:支持16s视频生成和720p分辨率 Apr 25, 2024 pm 02:55 PM

Open-Sora在开源社区悄悄更新了,现在支持长达16秒的视频生成,分辨率最高可达720p,并且可以处理任何宽高比的文本到图像、文本到视频、图像到视频、视频到视频和无限长视频的生成需求。我们来尝试尝试效果。生成个横屏圣诞雪景,发b站再生成个竖屏,发抖音还能生成16秒的长视频,这下人人都能过把编剧瘾了怎么玩?指路GitHub:https://github.com/hpcaitech/Open-Sora更酷的是,Open-Sora依旧全部开源,包含最新的模型架构、最新的模型权重、多时间/分辨率/长

AI初创集体跳槽OpenAI,Ilya出走后安全团队重整旗鼓! AI初创集体跳槽OpenAI,Ilya出走后安全团队重整旗鼓! Jun 08, 2024 pm 01:00 PM

上周,在内部的离职潮和外部的口诛笔伐之下,OpenAI可谓是内忧外患:-侵权寡姐引发全球热议-员工签署「霸王条款」被接连曝出-网友细数奥特曼「七宗罪」辟谣:根据Vox获取的泄露信息和文件,OpenAI的高级领导层,包括Altman在内,非常了解这些股权回收条款,并且签署了它们。除此之外,还有一个严峻而紧迫的问题摆在OpenAI面前——AI安全。最近,五名与安全相关的员工离职,其中包括两名最著名的员工,“超级对齐”团队的解散让OpenAI的安全问题再次被置于聚光灯下。《财富》杂志报道称,OpenA

See all articles