데이터 베이스 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&gt;[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으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

초지능의 생명력이 깨어난다! 하지만 자동 업데이트 AI가 등장하면서 엄마들은 더 이상 데이터 병목 현상을 걱정할 필요가 없습니다. 초지능의 생명력이 깨어난다! 하지만 자동 업데이트 AI가 등장하면서 엄마들은 더 이상 데이터 병목 현상을 걱정할 필요가 없습니다. Apr 29, 2024 pm 06:55 PM

초지능의 생명력이 깨어난다! 하지만 자동 업데이트 AI가 등장하면서 엄마들은 더 이상 데이터 병목 현상을 걱정할 필요가 없습니다.

iPhone의 느린 셀룰러 데이터 인터넷 속도: 수정 사항 iPhone의 느린 셀룰러 데이터 인터넷 속도: 수정 사항 May 03, 2024 pm 09:01 PM

iPhone의 느린 셀룰러 데이터 인터넷 속도: 수정 사항

미 공군이 주목할만한 최초의 AI 전투기를 선보였습니다! 전 과정에 걸쳐 장관이 직접 간섭 없이 테스트를 진행했고, 10만 줄의 코드를 21차례 테스트했다. 미 공군이 주목할만한 최초의 AI 전투기를 선보였습니다! 전 과정에 걸쳐 장관이 직접 간섭 없이 테스트를 진행했고, 10만 줄의 코드를 21차례 테스트했다. May 07, 2024 pm 05:00 PM

미 공군이 주목할만한 최초의 AI 전투기를 선보였습니다! 전 과정에 걸쳐 장관이 직접 간섭 없이 테스트를 진행했고, 10만 줄의 코드를 21차례 테스트했다.

공장에서 일하는 테슬라 로봇, 머스크 : 올해 손의 자유도가 22도에 달할 것! 공장에서 일하는 테슬라 로봇, 머스크 : 올해 손의 자유도가 22도에 달할 것! May 06, 2024 pm 04:13 PM

공장에서 일하는 테슬라 로봇, 머스크 : 올해 손의 자유도가 22도에 달할 것!

2024년 QS랭킹 공개! 컴퓨터 과학 MIT가 목록을 장악하고 있으며, 칭화 대학교가 11위, 북경 대학교가 15위를 차지하고 있습니다. 2024년 QS랭킹 공개! 컴퓨터 과학 MIT가 목록을 장악하고 있으며, 칭화 대학교가 11위, 북경 대학교가 15위를 차지하고 있습니다. Apr 18, 2024 pm 09:04 PM

2024년 QS랭킹 공개! 컴퓨터 과학 MIT가 목록을 장악하고 있으며, 칭화 대학교가 11위, 북경 대학교가 15위를 차지하고 있습니다.

단일 카드는 듀얼 카드보다 Llama를 70B 더 빠르게 실행합니다. Microsoft는 A100에 FP6을 넣었습니다 | 단일 카드는 듀얼 카드보다 Llama를 70B 더 빠르게 실행합니다. Microsoft는 A100에 FP6을 넣었습니다 | Apr 29, 2024 pm 04:55 PM

단일 카드는 듀얼 카드보다 Llama를 70B 더 빠르게 실행합니다. Microsoft는 A100에 FP6을 넣었습니다 |

Open-Sora 종합 오픈 소스 업그레이드: 16s 비디오 생성 및 720p 해상도 지원 Open-Sora 종합 오픈 소스 업그레이드: 16s 비디오 생성 및 720p 해상도 지원 Apr 25, 2024 pm 02:55 PM

Open-Sora 종합 오픈 소스 업그레이드: 16s 비디오 생성 및 720p 해상도 지원

70B 모델은 몇 초 안에 1,000개의 토큰을 생성하고 코드 재작성은 OpenAI가 투자한 코드 아티팩트인 Cursor 팀의 GPT-4o를 능가합니다. 70B 모델은 몇 초 안에 1,000개의 토큰을 생성하고 코드 재작성은 OpenAI가 투자한 코드 아티팩트인 Cursor 팀의 GPT-4o를 능가합니다. Jun 13, 2024 pm 03:47 PM

70B 모델은 몇 초 안에 1,000개의 토큰을 생성하고 코드 재작성은 OpenAI가 투자한 코드 아티팩트인 Cursor 팀의 GPT-4o를 능가합니다.

See all articles