第 10 步:创建第一个输入页面。第一个“有用的”页面将是一个允许用户输入帐号的页面,这是管理帐户的第一步。打开 faces-config.xml 图并将一个新页面拖至其上,然后双击图标对该页面进行编辑。
在本例中,我们希望为校园帐户 (campusaccounts) 创建另一个组织级别,因此在 /administration/campusaccounts 中创建了 choose.jspx(在 public html 之后添加 administration\campusaccounts)。我们决定让 JDeveloper 在第二步中创建托管 Bean。choose.jspx 的辅助 Bean 将自动命名为 Choose.java,并包含每个用户界面组件的域。这意味着,您在每次添加组件时(即便是如 spacer 般简单的组件),它都会通过自己的 getter 和 setter 显示为一个域。对于编写 Java 代码以更改 spacer 中的属性大小(如高度)来说,这十分有意义,然而还是会因此创建出复杂的辅助 Bean。在本例中,从自动创建的辅助 Bean 开始要更为简单些(如果我们希望了解它执行的操作)。 使用 Structure 窗口,将
<!--oracle-jdev-comment:auto-binding-backing-bean-name:backing_administration_campusaccounts_choose-->
向在 GlobalCampusAccounts 上指定导航规则的 faces 配置文件添加导航规则,界面将导航至应用程序的第一个页面。这是一个全局规则,因为您可以通过在任何应用程序的任意位置选择 CampusAccounts 的选项卡来更改为 CampusAccounts。在 faces-config.xml 中输入的标记是
<navigation-rule>
<navigation-case>
<from-outcome>GlobalCampusAccounts
<to-view-id>/administration/campusaccounts/choose.jspx
</navigation-case>
</navigation-rule>
您可能需要编辑 commandMenuItems 中的 logout 和 home 图标属性,并更改它们的图标值以使用 blaf 文件夹中的 gif 文件。
您需要将 PanelHorizontal 插入面板页以保存输入文本组件。尽管也可以使用组件选项板 (Component palette),但通常我们认为利用 Structure 页来执行该操作更为简单(右键单击 PanelPage 元素并选择 ADF Faces Core 组件即可)。注意,ADF 表单包含有 PanelPage,因此您已经具有了自己的 html 表单元素。向水平面板添加一个 InputText 组件。在 Properties 窗口中,更改标签以使用存储在资源文件中的属性。一种简单的方法是先编辑资源文件并添加属性,然后在 Structure 窗口中双击 inputText 元素,选择 Bind 在 JSF 对象中查找 res,并选择您刚才输入的属性值。一旦您习惯了访问资源所需的 EL 格式,就会发现在 Property Editor 中键入属性值也很简单。在水平面板上的输入文本组件后面添加一个 CommandButton,并更改其名称以使用资源文件中定义的另一个属性 — 再次建议您使用 Structure 窗口。
双击按钮转至辅助 Bean。您需要从 InputText 组件获取文本,并将其置于用户状态,以便当用户访问 CampusAccounts 应用程序的选项时它始终可用。
public String commandButton1_action() {
Object text = getInputText1().getValue();
UserSystemState.storeCurrentAcctNum(new Integer(acctNum));
return "list";
}
注意,此处无需任何验证,而您在使用 Faces 组件的选项时会进行不必要的验证。如果您在 InputText 元素上设置必需属性,则会强迫用户输入值。如果您在 InputText 标记内插入一个 ValidateRegExp 验证程序并添加模式 [0-9]+,则会要求用户至少为帐号输入一位数字。
在本例中,我们添加了来自 SRDemo 的 UserSystemState,以将其用作模型并创建用于保存帐号的静态函数。我们还必须添加 userSystemState(u 为小写) 作为 faces-config.xml 文件中的托管 Bean 的名称。您可以通过 managed-bean-class 域来推断我们使用的程序包名。JDeveloper 管理 faces-config.xml 文件的明显特征之一是,如果在编译代码或指定程序包名时出现问题,您就会在其标记中看到警告。JDeveloper 会主动分析 xml 配置文件。
<managed-bean>
<managed-bean-name>userSystemState</managed-bean-name>
<managed-bean-class>edu.uwec.financial.view.backing.UserSystemState</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
以下是 UserSystemState 的起始代码,用于创建 Command 按钮中使用的静态函数;它将替代所有来自 SRDemo 的域和方法。记住检查程序包名:
private HashMap _settings = new HashMap();
private static final String CURRENT_ACCT_NUM = "CURRENT_ACCT_NUM";
public Integer getCurrentAcctNum() {
return (Integer)_settings.get(CURRENT_ACCT_NUM);
}
public void setCurrentAcctNum(Integer acctNum) {
_settings.put(CURRENT_ACCT_NUM, acctNum);
System.out.println("setCurrentAcctNum:"+acctNum); // some old fashioned testing
}
public static void storeCurrentAcctNum(Integer acctNum) {
JSFUtils.setManagedBeanValue("userSystemState.currentAcctNum", acctNum);
}
public static void retrieveCurrentAcctNum() {
JSFUtils.getManagedBeanValue("userSystemState.currentAcctNum");
}
该代码比较奇特。userSystemState.currentAcctNum 似乎是 UserSystemState 中某个域的引用,但这个名称没有域。JSFUtils.getManagedBeanValue 函数调用的参数被解析为 getter;因此,userSystemState.currentAcctNum 将导致对 getCurrentAcctNum() 进行调用。
如果运行 index.jspx 并选择 CampusAccounts 选项卡,您应该看到应用程序的初始页面将如下所示:
相关专题
- Solaris基础知识入门 (4590篇文章)
- Oracle 10g基础应用 (4414篇文章)
- Oracle基础 (359篇文章)
- Oracle初学者必知的100个问题 (33377次浏览)
- Oracle PL/SQL语言基础 (14253次浏览)
- Oracle架构的基础知识(入门级) (13523次浏览)
- Win 2003 Server重新安装Oracle9i (614次浏览)
- Oracle优化的五个方面 (613次浏览)
- 多个Oracle数据库创建一个Excel报表 (554次浏览)
- 怎么样快速复制表或者是插入数据 (527次浏览)
- 解决Oracle中Exp/Imp大量数据处理问题 (526次浏览)
- 重启系统的时候自动启动oracle服务 (396次浏览)
- 记几个容易忘的oracle 函数 (366次浏览)



