练习 2.3:使用 OR 搜索条件

在此练习中,将把一个单选按钮组添加至允许用户选择 AND 或 OR 搜索条件的页面。当运行此页面时,它看起来应如下所示:

此练习末尾已完成的搜索页面

将 OR 搜索代码添加至库

  1. 打开 CustomerLib.egl 库文件。
  2. 将以下代码添加至该文件中最后一个 end 语句的前面:
    function NameAndStateSearch_Or(func int,
        lname char(30) in, state char(2) in, 
        Customers Customer[])
        get Customers with
    #sql{
                select
                    CUSTOMER_ID, FIRST_NAME, LAST_NAME, PASSWORD, PHONE, 
                    EMAIL_ADDRESS, STREET, APARTMENT, CITY, STATE, 
                    POSTALCODE, DIRECTIONS
                from EGL.CUSTOMER
                where LAST_NAME LIKE :lname OR STATE = :state
            };
        if (sqlcode != 0) func = 0; end
    end

    除了此函数在 where 子句中使用 OR 而不是 AND 之外,它与在前一个练习中添加的 NameAndStateSearch_And 函数完全相同。

  3. 保存该文件。
  4. 通过按 Ctrl+G 或通过右键单击文件然后从弹出菜单中单击生成来为库文件生成 Java 文件。
  5. 关闭该文件。

将单选按钮组添加至页面

  1. 返回到 customersearch.jsp 文件。
  2. 在“提交”按钮上方添加一个新行,方法是将光标放在“提交”按钮的左边,然后按 Enter 键。
  3. 从“选用板”视图的“Faces 组件”抽屉中,将单选按钮组拖到新行上。
  4. 单击该单选按钮组以选择它。
  5. 在“属性”视图中,单击添加选项按钮。就会列示该单选按钮组的新选项。
  6. 在新选项的名称字段中,输入以下文本:

    AND

  7. 在此选项的字段中,输入以下文本:

    AND

  8. 再次单击添加选项
  9. 对第二个选项的名称输入以下文本:

    OR

    “属性”视图看起来应如下所示:

    显示单选按钮组的选项的“属性”视图

  10. 保存该页面。

将 OR 搜索代码添加至页面

  1. 右键单击该页面,然后从弹出菜单中单击编辑页代码
  2. 用以下代码替换页代码文件中的所有代码:

    package pagehandlers;
    
    import data.*;
    
    PageHandler customersearch { handleHardIOErrors = no, throwNrfEofExceptions = yes }
        {view="customersearch.jsp", onPageLoadFunction="onPageLoad"}
    
    searchTerms Customer;        //Customer record (search) values
    searchResults Customer[];    //Customers results rows
    pagemsgRec msgRec;           //pagemsgRec variable of type MsgRec
    func int;                 //func - a flag to pass the state of the results
    andOr char(3);            //A char field that will be bound to the radio button group
    
    	Function onPageLoad()
        if (func == 0)    //Either no rows, or 1st time into page
          pagemsgRec.msg="No customer(s) found or no search criteria entered.";        
        End
    end 
    
    function searchFunction()
        func = 1;        //Initialize func before calling database
        searchTerms.Last_Name = searchTerms.Last_Name+"%";    //Add wildcard (%)
    
        if (andOr == "AND")
            CustomerLib.NameAndStateSearch_And(func, searchTerms.Last_Name, 
                            searchTerms.State, searchResults);    //Call search function
            pagemsgRec.msg = "Customer(s) found.  Search again?"; //Assign msg text
            pagemsgRec.nbr = sysLib.size(searchResults);          //Get row count
    else
            CustomerLib.NameAndStateSearch_Or(func, searchTerms.Last_Name, 
                            searchTerms.State, searchResults);    //Call search function
            pagemsgRec.msg = "Customer(s) found.  Search again?"; //Assign msg text
            pagemsgRec.nbr = sysLib.size(searchResults);          //Get row count
          end
       end  
    End
    
    Record msgRec            //Custom EGL record type definition
                             //used to combine numeric and string data
        10 nbr int;          //Integer - numeric field     
        10 msg char(222);    //Character data
    end

    除了下列差别之外,此代码与在前一个练习中添加的代码相似:

  3. 保存并关闭该文件。
  4. 返回到 customersearch.jsp 页面。
  5. 从“页数据”视图中,将 andOr - char(3) 变量绑定至单选按钮组,方法是将它拖到页面上的单选按钮组上。
  6. searchFunction() 函数绑定到页面上的“提交”按钮。

    该页面看起来应如下所示:

    搜索页面的外观

  7. 保存该页面。
  8. 测试该页面。

    当测试该页面时,尝试使用 AND 和 OR 函数。必须选择其中一个单选按钮才能使搜索页面正常工作。

    要使用此搜索页面仍然不易,因为样本数据库中的记录并不多,可猜测的州也不多。在下一个练习中,将把 State 输入字段更改为列示在数据库中使用的所有州的组合框。

现在,您可以开始进行练习 2.4:动态填充组合框了。

使用条款 | 反馈
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.