本教程说明了如何在中设置页面导航。首先,您将在IDE中创建一个Web应用程序,该应用程序在两个页面之间使用简单的导航。使用第一页上的按钮可以转至第二页。然后,对该应用程序进行修改,以使其在运行时基于Drop Down List组件的返回值来确定显示哪一页。您还将了解到另一种更高级的动态页面导航方法,通过该方法,可以在从下拉列表中进行选择后立即进行页面导航。
预计时间:20分钟
目录
l 创建第一页
l 向第二页添加组件
l 添加第三页
l 实现动态页面导航
l 部署应用程序
本教程将使用以下技术和资源:
JavaServer Faces组件/ |
1.2/Java EE 5* |
|
Travel数据库 |
不是必需的 |
|
BluePrints AJAX组件库 |
不是必需的 |
* 为了使用NetBeans IDE 6.0的Java EE 5功能,使用完全符合Java EE 5标准的应用服务器,比如Sun Java Application Server 9/GlassFish。
本教程针对。如果您使用的是其他服务器,请参考发行说明和常见问题解答以了解已知问题和解决方法。有关支持的服务器和 Java EE 平台的详细信息,请参见发行说明。
创建第一页
在本教程的第一部分中,您将创建一个包含两个页面的Web应用程序,并使用按钮在两个页面之间进行导航。随后,将添加一个Drop Down List组件,以使用户能够在运行时选择目标页。
首先,创建一个包含Static Text组件和Button组件的页面。
1.
创建一个新的Web应用程序项目,并将其命名为NavigationExample
。使用GlassFish V2 Application Server和Visual Web JavaServer Faces框架。
出现新项目,并且其初始页会显示在Visual Designer中。
2.
从Palette的类别中,将一个Static Text组件拖放到页面上。通过直接在该组件的默认文本上键入内容,将其text
属性更改为Page
One
。
3.
将一个Button组件从Palette拖放到页面上,并将其text
属性更改为Go
。
¡ 请注意:在IE7中有一个已知问题会影响到JSF1.2 Button组件的宽度。解决方法是将组件按钮放到一个布局组件中(Grid Panel、Group Panel或Layout Panel)。
在两个页面之间导航
接下来,在应用程序中添加另一个页面,然后通过创建链接或页面连线指定第一页和第二页之间的导航。
1. 在可视编辑器的编辑区域空白处右键单击,然后从弹出菜单中选择“页面导航”。
Page Flow Editor将显示“Page1.jsp”图标 ,它表示您在上一部分中创建的页面。注意, 该图标具有4个特性:
a. 其标记指示图标显示的页面类型。绿色箭头只是页面时项目的主页面。
b. 图标表示的文件名称用于区分产品中的页面。
c. “+”符号用于展开图标,以显示页面上的组件。
d. 连线端点用于绘制页面之间的导航线。
2. 按如下方法创建一个新JSP页面:
a. 在编辑区域中右键单击,然后选择。
b. 在New File对话框中,在Categories下面选择Java Server Faces,在File Types下面选择Visual Web JSF Page,然后单击Next。
c. 接受默认名称 Page2,然后单击Finish。
将在中显示Page2.jsp图标,并在窗口的NavigationExample >节点下面添加Page2.jsp节点。
3. 如果创建Page2.jsp之后未在Page Flow Editor中显示,请选择
4. 单击Page1.jsp图标上的“+”号以将其放大,以便可以看到button1图标。
5.
单击出现一条由第一页指向第二页的连线。默认情况下,新创建的连线名称为
case1
。
6.
双击该连线的名称,然后将其由case1
更改为Page2
。
7. 单击编辑工具栏中的XML以查看在最后两步中生成的代码。粗体显示的导航规则添加到托管bean代码下面,以省略号()表示。
代码样例 1:生成的代码 |
<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
<navigation-rule>
<from-view-id>/Page1.jsp</from-view-id>
<navigation-case>
<from-outcome>Page 2</from-outcome>
<to-view-id>/Page2.jsp</to-view-id>
</navigation-case>
</navigation-rule>
</faces-config>
|
在faces-config
标记内添加的代码用于指定此Web应用程序的单个导航规则。每个导航规则都指定一个初始页以及一个或多个目标页。
向第二页添加组件
现在,将向第二页添加一个标签,以便在视觉上将该页与第一页区分,然后运行应用程序。
1. 单击编辑工具栏中的。
2. 双击Page2.jsp图标。
将在Visual Designer中打开此页面。
3.
将一个Static Text组件放到页面上,并将其text
属性更改为Page Two
4. 按F6键以部署应用程序。
5. 在部署Web应用程序后,将在浏览器中打开第一页
6. 单击Go按钮,将从第一页导航至第二页。
在这一部分中,您创建了两个页面,并建立了从一个页面到另一个页面的简单导航。在下面的部分中,您将基于从Drop Down List组件中选择的内容来建立导航。
添加用于实现动态导航的下拉列表
现在,您将了解有关动态页面导航的信息。您将在应用程序的第一页中添加一个Drop Down List组件。用户可以在运行时通过来选择目标页。随后,您将在应用程序中添加第三个页面,以使包含两个目标选项。
1.
在Visual Designer中打开Page1.jsp
。
2. 将一个Drop Down List组件放在Static Text组件的下面。
3. 右键单击该Drop Down List组件,然后选择。
4. 在标记为的对话框中,将每个默认项的值替换为下图所示的值。单击每个表单元格以编辑值,并在编辑每个字段后按Enter键以接受更改。
5. 单击OK以保存所有更改。
添加第三页
您将创建第三个页面,从第一页可以导航至该页面。
1.
在Projects窗口中,右键单击NavigationExample > Web Pages节点,然后选择New > Visual Web JSF Page。在New Visual Web JSF Page向导中,单击Finish。IDE将创建并显示Page3.jsp
。
2.
将一个Static Text组件从窗口拖放到页面上。将该组件的text属性设置为Page Three
。
实现动态页面导航
在本部分,您将启用动态页面导航。通过动态页面导航,应用程序可以在运行时确定用户在第一页上单击 "Go" 按钮时将显示哪一页。
1. 打开Page Flow Editor。
2. 单击Page1.jsp图标以显示其内容,然后从按钮的连接器端口拖动一条连线至Page3.jsp图标。
3.
将该连线的名称由case1
更改为Page 3
。
4.
双击Page1.jsp
图标,然后单击编辑工具栏中的Design以显示第一页的布局。
5. 双击Go按钮组件,以便在Java编辑器中显示其action事件处理程序方法的源代码。
6.
将方法中的return
语句替换为下面以粗体显示的代码:
代码样例2:Return语句 |
public String button1_action() {
return (String) dropDown1.getValue();
}
|
部署应用程序
您将对页面之间的导航进行测试。
1. 按F6键以部署应用程序。
2. 在第一页上,从下拉列表中选择Page 2,然后单击Go转至第二页。
3. 单击浏览器的按钮可以从第二页返回至第一页。
4. 现在,从下拉列表中选择Page 3,然后单击Go转至第三页。
实现高级动态页面导航
在上一部分中,动态页面导航是以直接的方式进行处理的。用户只需在下拉列表中选择要导航到的页面,然后单击Go按钮即可。如果希望在下拉列表值发生更改后立即更改页面,请使用以下步骤修改在前面部分创建的项目。
1. 单击Page1标签,然后单击编辑工具栏中的Design以切换至Visual Designer。
2. 右键单击Go按钮,然后选择Delete。
3.
双击Drop Down List组件以在Java编辑器中查看Page1
类代码。
4.
将下面以粗体显示的代码添加到dropDown1_processValueChange()
处理程序方法中。前两行代码用于检索应用程序的对象引用。在应用程序对象中,您可以获得的实例。为此对象调用handleNavigation()
方法,可以指定从Drop Down List组件检索的值(该值指定要导航到的页面)。
代码样例3:方法 |
public void dropDown1_processValueChange(ValueChangeEvent event) {
Application application = getApplication();
NavigationHandler navigator = application.getNavigationHandler();
FacesContext facesContext = getFacesContext();
navigator.handleNavigation(facesContext,
null,(String) dropDown1.getValue());
}
|
请注意,出现的红色曲线指示找不到Application
、NavigationHandler
和FacesContext
类。您将在下一步中导入这些类。
5. 在中的任意位置右键单击,然后选择,以便将下列import语句自动添加到源文件的顶部位置附近:
代码样例4:Navigation Handler方法的Import语句 |
import javax.faces.application.Application;
import javax.faces.application.NavigationHandler;
import javax.faces.context.FacesContext;
|
6. 单击编辑工具栏中的以便在Visual Designer中查看Page1。
7. 右键单击Drop Down List组件,然后选择,以便指示在选择后自动提交选定的项。
8. 部署并运行该应用程序。
9. 选择下拉列表中的Page 2项,以便从第一页导航至第二页。单击Back按钮返回至第一页。
10. 选择下拉列表中的Page 3项,以便从第一页导航至第三页。
执行更多操作:使用大量页面
本教程介绍的方案适用于页数相对较少的情况,但很多实际的应用程序需要在数十个页面中进行导航。要建立此类导航,请尝试下列步骤:
1. 在中,单击编辑工具栏中的XML按钮。
2. 在下面的XML中添加类似于第一个条目的导航规则。将<from-view-id>设置为/*,将<from-outcome>设置为某个标识字符串,然后将<to-view-id>设置为目标页面。
代码样例5:包含大量页面的应用程序的页面导航XML |
<?xml version="1.0" encoding="UTF-8"?>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
|
当返回至时,该编辑器将显示错误。不过,您可以忽略这些错误。
3. 对于要发送到页面的操作组件中的所有操作处理方法,您需要将这些方法返回from-outcome(本例中为 "login"),如下所示:
public String button1_action() {
return "login";
}
小结
用于实现页面导航的典型工作流如下所示:
1. 创建页面。
2. 将支持导航的组件(如按钮和下拉列表)放到页面上。
3. 使用,在组件和页面之间绘制连线。
4.
使用dropDown1_processValueChange()
处理程序方法来实现更高级的导航。
另请参见:
l NetBeans Visual Web Pack 入门指南
l 使用页面片段