» 搜索提示 
 
使用数据提供器
2006 年 4 月 [修订号:V2.1-1]  
在本教程中,您将生成一个包含两个页面的示例应用程序。第一页在会话 Bean 中使用数据提供器来包装 Enterprise JavaBean (Enterprise Bean) 对象,以显示数据库中的数据。第二页在页面 Bean 中使用数据提供器来包装 RowSet 对象。使用此页,用户可以通过与数据提供器绑定的组件来编辑数据库中的数据。
数据提供器在 Web 应用程序的组件及其持久性层(如数据库表、数组对象或 Enterprise JavaBean 对象)之间建立了一个层结构。通过此层,您可以采用相同的方式访问数据,即使数据可能来自不同的源。组件面板中包含了许多可捆绑数据提供器的组件。
本教程使用了其他基础教程中介绍的一些概念。如果您不具备 IDE 及其设计组件的基本知识,请考虑首先阅读一些基础教程,如 Sun Java Studio Creator 入门指南使用数据绑定组件访问数据库创建数据库服务器类型和数据源。要了解有关使用 Enterprise JavaBean 对象的详细信息,请参见使用 EJB 组件
 
目录
 
入门指南
为 Enterprise JavaBean 组件创建数据提供器
将组件添加到 UseEjb 页中
为 UseEjb 页提供光标按钮操作方法
测试应用程序:第 1 部分
创建 UseRdbms 页
将数据提供器添加到 UseRdbms 页
将组件放置在 UseRdbms 页上
配置复选框组件
为 UseRdbms 页提供光标按钮操作方法
将光标行属性添加到会话 Bean 中
编辑 prerenderpreprocess 方法
为 Commit 和 Revert 按钮提供操作方法
设置页面导航
测试应用程序:第 2 部分
[spacer] 此页上的内容适用于 Sun Java Studio Creator 2.1
 
本教程将使用 Java Studio Creator IDE 提供的捆绑数据库。如果您要使用其他数据库,则需要对本教程和 Java Studio Creator 数据源进行适当的更改。例如,在使用其他数据库时,您需要打开“服务器”窗口并添加数据源。有关使用其他数据库的信息,请参见创建数据库服务器类型和数据源
 
IDE 提供了可在教程和样例应用程序中使用的 Enterprise JavaBean 组件。您可以将其他 EJB 添加到 IDE 中,然后在项目中使用它们。有关详细信息,请参见联机帮助。
 

入门指南

 
首先,创建一个 Web 应用程序项目。
  1. 创建一个新项目并将其命名为 DataProviders

  2. 在“项目”窗口中,右键单击 "DataProviders" >“Web 页”节点,然后从弹出式菜单中选择“新建”>“页”。

    将打开“新建页”对话框。

  3. 在“文件名”文本框中,键入 UseEjb,然后按 Enter 键。

    一个新页面将在可视设计器中打开。

  4. 在“项目”窗口中,右键单击 "UseEjb",然后从弹出式菜单中选择“设置为起始页”。

    当用户访问 Web 应用程序时,该页是浏览器显示的第一页。

  5. 启动数据库服务器,方法是从主菜单中选择“数据”>“启动 Bundled Database”。

    如果该菜单项处于禁用状态,则表明数据库已启动。
 

为 Enterprise JavaBean 组件创建数据提供器

 
请按照以下步骤为 TravelEJB 组件的 getPersons 方法创建 travelGetPersons1 数据提供器。在 Web 应用程序第一次访问 EJB 数据提供器时,该数据提供器将调用 getPersons 方法。并且它会将数据存储在内部缓存中,直至取消访问该数据提供器时这些数据才会消失。如果您需要刷新内部缓存,则可以调用 travelGetPersons1.refresh()
 
您可以将 travelGetPersons1 数据提供器添加到会话 Bean 中,这样在用户会话的整个过程中该数据提供器对象将始终存在。如果要将数据提供器添加到页面 Bean 中,则在每次发出请求时都会创建一个新的数据提供器,例如在显示页面和提交表单时都会如此,这样会产生不必要的数据存取。同时,数据提供器在页面范围中时,您还必须将光标的当前位置存储在会话范围中,这样才可在请求中找到光标位置。因此,在会话范围中创建数据提供器的另一个好处是:您无需显式存储并检索光标的当前位置。
 
然后,您可以将 Web 页中的只读组件绑定到数据提供器数据字段中。
  1. 在“服务器”窗口中,展开 "Enterprise Java Beans" > "Travel Center" > "TravelEJB" 节点,然后找到 getPersons() 方法。

  2. 在“概要”窗口中,找到 "SessionBean1" 节点。

  3. getPersons 方法从“服务器”窗口拖放到 "SessionBean1" 节点上,如下图所示。

    图 1:创建 EJB 数据提供器
    图 1:创建 Enterprise JavaBean 数据提供器
     
    请注意,"travelGetPersons1" 和 "travelClient1" 节点将出现在“概要”窗口的 "SessionBean1" 节点下,其中 travelClient1 是 TravelEJB 的客户端实例,travelGetPersons1 是为 getPersons 方法提供的数据提供器。
     
    图 2:travelGetPersons1 数据提供器
    图 2:travelGetPersons1 数据提供器
     

将组件添加到 UseEjb 页中

 
现在,您将在页面中设置组件的布局。
 
  1. 在“组件面板”窗口中,展开“基本”节点,然后将以下组件拖动到可视设计器中的 UseEjb 页上,并按图 3 所示来排列它们。

    UseEjb 页的基本组件
    数量
    组件
    1
    超级链接
    4
    静态文本
    4
    按钮
    3
    标签
    1
    消息组
     
    图 3:UseEjb 的初始页面布局
    图 3:UseEjb 的初始页面布局
     
  2. 选择“超级链接”组件,然后在“属性”窗口中编辑以下属性:

    • “常规”类别下的 id 属性:rdbmsLink
    • “外观”类别下的 text 属性:Go To Rdbms


  3. 选择第一个“静态文本”组件,然后在“属性”窗口中编辑以下属性:

    • “外观” 类别下的 text 属性:
      This page displays Person objects obtained from an EJB method.


  4. 选择最左侧的“按钮”组件,然后在“属性”窗口中编辑以下属性:

    • “常规”类别下的 id 属性:firstButton
    • “外观”类别下的 text 属性:|<


  5. 选择左数第二个“按钮”组件,然后在“属性”窗口中编辑以下属性:

    • “常规”类别下的 id 属性:previousButton
    • “外观”类别下的 text 属性:<


  6. 选择左数第三个“按钮”组件,然后在“属性”窗口中编辑以下属性:

    • “常规”类别下的 id 属性:nextButton
    • “外观”类别下的 text 属性:>


  7. 选择最右侧的“按钮”组件,然后在“属性”窗口中编辑以下属性:

    • “常规”类别下的 id 属性:lastButton
    • “外观”类别下的 text 属性:>|


  8. 选择第一个“标签”组件,然后在“属性”窗口中编辑以下属性:

    • “外观”类别下的 text 属性:Name:


  9. 选择第二个“标签”组件,然后在“属性”窗口中编辑以下属性:

    • “外观”类别下的 text 属性:Job Title:


  10. 选择第三个“标签”组件,然后在“属性”窗口中编辑以下属性:

    • “外观”类别下的 text 属性:Frequent Flyer:


  11. 选择第一个标签组件右侧的“静态文本”组件,然后在“属性”窗口中编辑以下属性:

    • “常规”类别下的 id 属性:nameStaticText


  12. 要在应用程序中显示数据,必须将页面中的组件与数据提供器返回的数据绑定。右键单击 nameStaticText 组件,然后从弹出式菜单中选择“绑定到数据”。将打开“绑定到数据”对话框。

  13. 在“绑定到数据”对话框中,单击“绑定到数据提供器”标签,然后选择 name 数据字段,如下图所示。单击“确定”。

  14. 图 4:“绑定到数据”对话框
    图 4:“绑定到数据”对话框
     
  15. 选择第二个标签组件右侧的“静态文本”组件,然后在“属性”窗口中编辑以下属性:

    • “常规”类别下的 id 属性:jobTitleStaticText


  16. 右键单击 jobTitleStaticText 组件,然后从弹出式菜单中选择“绑定到数据”。将打开“绑定到数据”对话框。

  17. 在“绑定到数据”对话框中,单击“绑定到数据提供器”标签,然后选择 jobTitle 数据字段。单击“确定”。

  18. 选择第三个标签组件右侧的“静态文本”组件,然后在“属性”窗口中编辑以下属性:

    • “常规”类别下的 id 属性:freqFlyerStaticText


  19. 右键单击 freqFlyerStaticText 组件,然后从弹出式菜单中选择“绑定到数据”。将打开“绑定到数据”对话框。

  20. 在“绑定到数据”对话框中,单击“绑定到数据提供器”标签,然后选择 freqFlyer 数据字段。单击“确定”。

    现在,页面的设计视图应如图 5 所示。
     
    图 5:UseEjb 的最终页面布局
    图 5:UseEjb 的最终页面布局
     

为 UseEjb 页提供光标按钮操作方法

 
为了使光标导航按钮起作用,必须为其中的每个按钮提供操作方法。
  1. 在可视设计器中,双击最左侧的按钮(其 id 属性为 firstButton)。将为该按钮创建 firstButton_action() 方法,这将打开 Java 编辑器,同时文本光标位于该方法中。

  2. 将以下代码行插入到操作方法(在代码样例 1 中显示了完整的方法)中:
    getSessionBean1().getTravelGetPersons1().cursorFirst();
    
  3. 双击其他按钮,并通过添加代码样例 1 中以粗体显示的代码来编辑其操作方法。

    提示: 您可以直接从该窗口中剪切以下粗体显示的代码并将其粘贴到 Java 编辑器中。
     
    代码样例 1:UseEjb 页的按钮操作方法
        public String firstButton_action() {
             getSessionBean1().getTravelGetPersons1().cursorFirst();
             return null;
        }
    
        public String previousButton_action() {
             //work around dataprovider implementation bug
             RowKey currentRow = 
                 getSessionBean1().getTravelGetPersons1().getCursorRow();
             if ((currentRow instanceof IndexRowKey) &&
                        ((IndexRowKey)currentRow).getIndex() <= 0) {
                 return null;
             }
             getSessionBean1().getTravelGetPersons1().cursorPrevious();
             return null;
        }
    
        public String nextButton_action() {
             getSessionBean1().getTravelGetPersons1().cursorNext();
             return null;
        }
    
        public String lastButton_action() {
             getSessionBean1().getTravelGetPersons1().cursorLast();
             return null;
        }
    
     
    请注意,previousButton_action() 方法的代码中包含了一个小错误的解决方案。如果没有此代码,则当用户单击 id 属性为 previousButton 的按钮时,光标将移动到第一行之前的位置,而且不会显示任何信息。

  4. 在源代码中单击鼠标右键,然后从弹出式菜单中选择“修复导入”。

    IDE 将添加以下 import 语句:

    import com.sun.data.provider.RowKey;
 

测试应用程序:第 1 部分

 
从主菜单中,选择“运行”>“运行主项目”以生成并运行应用程序。应用程序将在缺省 Web 浏览器中打开,并且您可以使用按钮在 travelGetPersons1 数据提供器中的 Person 对象中导航,以便查看从 getPersons() EJB 方法调用获取的每个人的姓名、职务和经常乘坐飞机的情况。但是,当您单击 "Go to Rdbms" 超文本链接时,会发现没有任何变化。现在,您将创建第二页,以完成本教程并启用该超文本链接。
 

创建 UseRdbms 页

 
现在将创建第二页,用户可以通过该页面编辑关系数据库管理系统 (Relational Database Management System, RDBMS) 中的信息。您将为页面 Bean 添加一个包装 CachedRowSet 对象的 CachedRowSet 数据提供器。CachedRowSet 实例在会话范围中。这就意味着,除非您显式通知 CachedRowSet 抛出其数据(例如通过调用数据提供器的 releaserefresh 方法来实现),否则 Web 应用程序将在请求之间保存该数据。这样您就无需再次执行查询了。但是,因为数据提供器在页面 Bean 中,所以必须在会话范围中使用一个属性来保存并重新获取数据提供器的当前光标位置。
  1. 在“项目”窗口中,右键单击 "DataProviders" >“Web 页”,然后从弹出式菜单中选择“新建”>“页”。

    将打开“新建页”对话框。

  2. 在“新建页”对话框中,将页命名为 UseRdbms,然后单击“完成”。

    将在可视设计器中打开新页面。
 

将数据提供器添加到 UseRdbms 页

 
  • 在“服务器”窗口中,将“数据源”> "Travel" >“表”下的 "PERSON" 节点拖放到可视设计器中的 UseRdbms 页上。IDE 会将 personDataProvider 对象添加到页面上,并将 personRowSet 对象添加到 SessionBean1 上,如下图所示。  
     
    图 6:personDataProvider 和 personRowSet 对象
    图 6personDataProviderpersonRowSet 对象
 

将组件放置在 UseRdbms 页上

 
请按照以下步骤将组件添加到页面中,并编辑其属性。完成编辑后,产生的页面设计视图应如图 9 所示。
  1. 在“组件面板”>“组件”窗口中,将以下“基本”类别的组件拖放到可视设计器中的 "UseRdbms" 页上,并对它们进行排列,如图 7 所示。

    UseRdbms 页的“基本”类别组件
    数量
    组件
    1
    超级链接
    1
    静态文本
    6
    按钮
    2
    标签
    2
    文本字段
    1
    复选框
    1
    消息组
     
    图 7:UseRdbms 的初始页面布局
    图 7:UseRdbms 的初始页面布局
     
  2. 选择“超级链接”组件,然后在“属性”窗口中编辑以下属性:

    • “常规”类别下的 id 属性:ejbLink
    • “外观”类别下的 text 属性:Go To EJB


  3. 选择第一个“静态文本”组件,然后在“属性”窗口中编辑以下属性:

    • “外观”类别下的 text 属性:
      This page lets you view and modify PERSON data obtained from 
      a database.Your changes are stored in the CachedRowSet in session. 
      They are committed to the backing data store when you click Commit 
      Changes.They are reverted when you click Revert Changes.

  4. 选择顶部最左侧的“按钮”组件,然后在“属性”窗口中编辑以下属性:

    • “常规”类别下的 id 属性:firstButton
    • “外观”类别下的 text 属性:|<


  5. 选择左数第二个“按钮”组件,然后在“属性”窗口中编辑以下属性:

    • “常规”类别下的 id 属性:previousButton
    • “外观”类别下的 text 属性:<


  6. 选择左数第三个“按钮”组件,然后在“属性”窗口中编辑以下属性:

    • “常规”类别下的 id 属性:nextButton
    • “外观”类别下的 text 属性:>


  7. 选择顶部最右侧的“按钮”组件,然后在“属性”窗口中编辑以下属性:

    • “常规”类别下的 id 属性:lastButton
    • “外观”类别下的 text 属性:>|


  8. 选择第一个标签组件右侧的“文本字段”组件,然后在“属性”窗口中编辑以下属性:

    • “常规”类别下的 id 属性:nameTextField


  9. 右键单击 nameTextField 组件,然后从弹出式菜单中选择“绑定到数据”。将打开“绑定到数据”对话框。

  10. 在 nameTextField 的“绑定到数据”对话框中,单击“绑定到数据提供器”标签,然后从数据提供器的下拉列表中选择 "personDataProvider"。选择 PERSON.NAME 数据字段,如下图所示。单击“确定”。

    图 8:“绑定到数据”对话框
    图 8:“绑定到数据”对话框
     
  11. 选择下一个“文本字段”组件,然后在“属性”窗口中编辑以下属性:

    • “常规”类别下的 id 属性:jobTitleTextField


  12. 右键单击 jobTitleTextField 组件,然后从弹出式菜单中选择“绑定到数据”。将打开“绑定到数据”对话框。

  13. 在 jobTitleTextField 的“绑定到数据”对话框中,单击“绑定到数据提供器”标签,然后从数据提供器的下拉列表中选择 "personDataProvider"。选择 PERSON.JOBTITILE 数据字段,然后单击“确定”。

  14. 选择第一个“标签”组件,然后在“属性”窗口中编辑以下属性:

    • “外观”类别下的 for 属性:nameTextField
    • “外观”类别下的 text 属性:Name:


  15. 选择第二个“标签”组件,然后在“属性”窗口中编辑以下属性:

    • “外观”类别下的 for 属性:jobTitleTextField
    • “外观”类别下的 text 属性:Job Title:

  16. 选择“复选框”组件,然后在“属性”窗口中编辑以下属性:

    • “常规”类别下的 id 属性:freqFlyerCheckbox
    • “外观”类别下的 label 属性:Frequent Flyer


  17. 选择位于 freqFlyerCheckbox 组件下方的左侧“按钮”组件,然后在“属性”窗口中编辑以下属性:

    • “常规”类别下的 id 属性:commitButton
    • “外观”类别下的 text 属性:Commit Changes


  18. 选择位于 freqFlyerCheckbox 组件下方的右侧“按钮”组件,然后在“属性”窗口中编辑以下属性:

    • “常规”类别下的 id 属性:revertButton
    • “外观”类别下的 text 属性:Revert Changes
     
    现在页面的设计视图应如图 9 所示。
     
    图 9:UseRdbms 的最终页面布局
    图 9:UseRdbms 的最终页面布局
     

配置复选框组件

 
对于 Java Studio Creator 2 IDE 和 Java Studio Creator 2 update 1 IDE 而言,两者使用的捆绑数据库并不相同。Java Studio Creator 2 IDE 中的 FREQUENTFLYER 数据库列是布尔型的,而 Java Studio Creator 2 update 1 IDE 中的 FREQUENTFLYER 数据库列是整型的。若要使用 Java Studio Creator 2 update 1 IDE,请按照前半部分操作执行。若要使用 Java Studio Creator 2 IDE,请按照后半部分操作执行。如果您不确定使用的是哪一个版本,请从主菜单中选择“视图”>“欢迎”。此时“欢迎”页上的标题栏会出现 IDE 的版本。
 
在 Java Studio Creator 2 update 1 IDE 中,请执行以下步骤来配置复选框组件。
 
  1. 在编辑工具栏中,单击 "Java" 以打开 Java 编辑器。

  2. 滚动到源文件的底部,并在最后一个右花括号前面添加以下代码。

    代码样例 2:freqFlyer 属性的代码
        /**
         * Holds value of property freqFlyer.
         */
        private boolean freqFlyer;
        
        /**
         * Getter for property freqFlyer.
         * @return Value of property freqFlyer.
         */
        public boolean isFreqFlyer() {
            Integer freqFlyer = (Integer) personDataProvider.getValue(
                    "PERSON.FREQUENTFLYER");
            return freqFlyer.intValue()==1? true : false ;
        }
        
        /**
         * Setter for property freqFlyer.
         * @param freqFlyer New value of property freqFlyer.
         */
        public void setFreqFlyer(boolean freqFlyer) {
            if(freqFlyer){
                personDataProvider.setValue(
                         "PERSON.FREQUENTFLYER", new Integer(1));
            }else{
                personDataProvider.setValue(
                        "PERSON.FREQUENTFLYER", new Integer(0));
            };
            this.freqFlyer = freqFlyer;
        }
     
  3. 单击编辑工具栏中的“设计”按钮,将在可视设计器中显示该页。

  4. 在可视设计器中,选择“复选框”组件。

  5. 在“属性”窗口中,单击 selected 属性的省略号 (...) 按钮。

    将出现一个对话框。

  6. 选择“使用绑定”单选按钮,然后打开“绑定到对象”标签。在“选择绑定目标”列表中,选择 "UseRdbms" > "freqFlyer",如下图所示。单击“确定”应用更改并关闭对话框。

    图 10:将复选框组件绑定到数据
    图 10:将复选框组件绑定到数据
     
在 Java Studio Creator 2 IDE 中,请执行以下步骤来配置复选框组件。
 
  1. 在可视设计器中,选择“复选框”组件。

  2. 在“属性”窗口中,单击 selected 属性的省略号 (...) 按钮。

    将出现一个对话框。

  3. 选择“使用绑定”单选按钮。

  4. 单击“绑定到数据提供器”标签,从下拉列表中选择 "personDataProvider",然后选择 PERSON.FREQUENTFLYER

  5. 单击“确定”。
 

为 UseRdbms 页提供光标按钮操作方法

 
为了使光标导航按钮起作用,必须为其中的每个按钮提供操作方法。
 
  1. 在可视设计器中,双击最左侧的按钮(其 id 属性为 firstButton)。将为该按钮创建 firstButton_action() 方法,并且将打开 Java 编辑器,同时文本光标位于该方法中。

  2. 将以下代码行插入到操作方法(在代码样例 3 中显示了完整的方法)中:

    personDataProvider.cursorFirst();

  3. 双击其他按钮,并通过添加代码样例 3 中以粗体显示的代码来编辑其操作方法。请注意,只有双击了按钮后 IDE 才会创建操作方法。此操作还将设置该按钮的 action 属性。

    代码样例 3:UseRdbms 页的按钮操作方法
         public String firstButton_action() {
             personDataProvider.cursorFirst();
             return null;
         }
    
         public String previousButton_action() {
             personDataProvider.cursorPrevious();
             return null;
         }
    
         public String nextButton_action() {
             personDataProvider.cursorNext();
             return null;
         }
    
         public String lastButton_action() {
             personDataProvider.cursorLast();
             return null;
         }
    
     
    请注意,代码样例 1 中的 getSessionBean1().getTravelGetPersons1() Enterprise JavaBean 方法调用被替换为 UseRdbms 页的 personDataProvider 调用。
 

将光标行属性添加到会话 Bean 中

 
现在,您将向会话 Bean 中添加一个用于存储 personDataProvider 的当前光标位置的属性。
  1. 单击“设计”以便在可视设计器中显示 "UseRdbms" 页。

  2. 右键单击“概要”窗口中的 "SessionBean1" 节点,然后选择“添加”>“属性”。将打开“新建属性模式”对话框。

  3. 在“新建属性模式”对话框中,为“名称”文本框键入 cursorRow,为“类型”文本框键入 RowKey

  4. 单击“确定”关闭“新建属性模式”对话框。此操作将在会话 Bean 中创建类型为 RowKey 的私有 cursorRow 属性以及 getter 和 setter 方法。

  5. 在“概要”窗口中,右键单击 "SessionBean1" 节点,然后从弹出式菜单中选择“打开”。会话 Bean 的 Java 代码将在 Java 编辑器中打开。

  6. 在会话 Bean 的源代码中,单击鼠标右键,然后从弹出式菜单中选择“修复导入”。

    IDE 将添加以下 import 语句:

    import com.sun.data.provider.RowKey;
 

编辑 prerenderpreprocess 方法

 
现在,您将编辑 UseRdbms 页的 prerenderpreprocess 方法,以保存和恢复光标位置。
 
  1. 在编辑器中,单击 "UseRdbms" 标签,然后单击 "Java"。将打开 Java 编辑器以显示页面的 Java 支持代码。

  2. 在页面中向下滚动,以找到 preprocessprerender 方法。添加以下代码样例中以粗体显示的代码。

    代码样例 4:preprocessprerender 方法的代码
    public void preprocess() {
        /* Restore the current cursor position */
        personDataProvider.setCursorRow(getSessionBean1().getCursorRow());
    }
    
    
    public void prerender() {
        /* Save the current cursor position */
        getSessionBean1().setCursorRow(personDataProvider.getCursorRow());
    }
    
     

为 Commit 和 Revert 按钮提供操作方法

 
现在,您将为 "Commit Changes" 和 "Revert Changes" 按钮添加操作方法。
 
  1. 单击“设计”以在可视设计器中查看 "UseRdbms" 页。

  2. 双击 "Commit Changes" 按钮为该按钮创建操作方法。将打开 Java 编辑器,且光标位于 commitButton_action() 方法中。

  3. 添加以下代码样例中以粗体显示的代码。

    代码样例 5:提交操作方法的代码
         public String commitButton_action() {
             try {
                 personDataProvider.commitChanges();
                 // Refresh internal cache for UseEjb page to get the changes
                 getSessionBean1().getTravelGetPersons1().refresh();
                 info("Commit successful.");
             }
             catch (Exception e) {
                 personDataProvider.revertChanges();
                 error("Commit unsuccessful:  " + e);
                 log("error in commitButton_action: " + e, e);
             }
             return null;
         }
    
     
  4. 单击“设计”以在可视设计器中查看 "UseRdbms" 页。

  5. 双击 "Revert Changes" 按钮以创建该按钮的操作方法。将打开 Java 编辑器,且光标位于 revertButton_action() 方法中。

  6. 添加以下代码样例中以粗体显示的代码。

    代码样例 6:Revert 操作方法的代码
         public String  revertButton_action() {
             try {
                 personDataProvider.revertChanges();
                 info("Revert successful.");
             }
             catch (Exception e) {
                 error("Revert unsuccessful: " + e);
                 log("error in revertButton_action: " + e, e);
             }
             return null;
         }
    
     

设置页面导航

 
现在,您将建立超级链接,以便用户可以在两个页面之间导航。建立超级链接的一种方法是:使用页面导航编辑器,如其他教程中所述。另一种方法是:为每个超级链接组件设置 url 属性。
 
如果使用页面导航编辑器建立超级链接,在单击 ejbLink 时将处理 UseRdbms 页上的输入字段。为了避免执行处理(以及可能出现转换和验证错误),您需要让 ejbLink 提交一个无参与者的虚拟表单,或设置其 immediate 属性,或者,通过设置 url 属性来绕过页面提交。就本教程而言,为每个超级链接组件设置 url 属性将更为简单。有关虚拟表单的详细信息,请参见使用虚拟表单教程。
  1. 在可视设计器中查看 "UseEjb" 页。

  2. 选择 rdbmsLink 组件。

  3. 在“属性”窗口中,单击“行为”> "url" 属性的省略号 (...) 按钮。

    将打开一个对话框。

  4. 在对话框中,选择“使用值”,然后选择 "UseRdbms" 节点,如图 11 所示。

    图 11:设置 url 属性
    图 11:设置 url 属性


  5. 单击“确定”以设置属性值并关闭对话框。

    此时 url 属性被设置为 /faces/UseRdbms.jsp

  6. 同样,可以在可视设计器中查看 "UseRdbms" 页,并为 ejbLink 组件设置“行为”> "url" 属性。此时,将值设置为 /faces/UseEjb.jsp
 

测试应用程序:第 2 部分

 
从主菜单中,选择“运行主项目”以生成并运行应用程序。该应用程序会在缺省 Web 浏览器中打开。起始页 UseEjb 会像以前那样运作,而且通过单击超级链接,您可以导航到 UseRdbms 页。
 
在 UseRdbms 页中,您可以使用导航按钮在 PERSON 数据库表的记录中进行导航,并可以编辑每个人的姓名、职务和经常乘坐飞机的情况。请尝试以下操作:

  • 单击 "Commit Changes",将编辑内容写入到数据库中。
  • 单击 "Revert Changes",将放弃未提交的编辑内容,并重新装入数据库中的数据。
  • 单击超级链接可以返回到 UseEjb 页中。
 

小结

 
在本教程中,您在会话范围内为 Enterprise JavaBean 创建了一个 Web 页和一个数据提供器。通过将数据提供器与页面上的组件绑定,使用数据提供器显示了 EJB 方法调用中的信息。然后,创建了第二页和该页的数据提供器,以访问关系数据库管理系统中的数据。通过第二个数据提供器,用户可以编辑数据库中的数据,将其更改提交到持久性存储中,或者将待定的编辑内容恢复为以前存储的值。
 
另请参见
 
更多的开发者资源
 
有关为开发者提供的更多教程、文章、提示、论坛、更新和专家建议,请访问 Sun Developer Network (SDN) 上的 Java Studio Creator 开发者资源,网址为 http://gceclub.sun.com.cn/prodtech/javatools/jscreator/。
 

 
此页的最新修改时间:2006 年 4 月 27 日