OAF_OAF Framework页面分析(概念)OAF_OAF Framework状态分析(概念)

20150506 Created By BaoXinjian

20150706 Created By BaoXinjian

图片 11.
页面基础

图片 21. 架概述



在浏览器层,OAF页面和任何页面一样,是正统的HTML页面。

搭概述

每当中间层,OAF页面实际是由于外存中的JAVABEAN结构来兑现的,和风土人情的JAVA客户端界面相同。

下图展示了主导的OAF状态管理组件的用开发视图(它并没有反映所有的OAF细节)。

每个页面被的用户界面(UI)组件(按钮、标签、图片等)实际还对应一个或多个结构被之JAVABEAN。

 
图片 32.
Root Application
Module(数据库会话和事情状态)

当浏览器请求一个初页面时,OAF读取页面被的声明的第一数据来建WEB
BEAN的组织。


本着各个一个带有UI控制器的BEAN,OAF调用你写的代码来初始化页面。

每当OAF页面中,每个页面还干到一个root
application
module,提供了作业及下文和JDBC数据库连接(在OAF中,数据库会话是事关到JDBC连接的)。

当页面执行完毕,OAF将WEBBEAN结构交给UIX框架来处理,它亦可以的转为HTML发送到浏览器。

Root application
module是OAF的命脉module,因为基本的下数据(视图对象、实体对象等)和页面的WEB
BEAN结构还自动为其(oracle.apps.fnd.framework.OADBTransaction)缓存。

 

警戒:使用后降按钮可能而APPLICATION
MODULE状态丢失。在编制代码之前要参考“支持后下降按钮”。

当浏览器提交一个FORM(如:用户挑选了搜索区的GO按钮),如产生必不可少,OAF重新成立WEBBEAN结构(BEAN结构于伸手中是缓存了之,只有以飞的动静下得重建),然后调用你当PAGEBEAN中写的处理事件的代码。当页面处理了,HTML页面还树立并发送至浏览器。

抱有有让工作中之数据对有共享这无异ROOT
APPLICATION MODULE实例的页面都是可看的。

 

OAF提供了若可以据此来起业务中存储、取出、删除数据的法。一个简单易行的业务可以让控制器和模型中之代码访问,这些工具是当oracle.apps.fnd.framework.webui.OAPageContext(对于控制器)和OADBTransaction(对于范)中提供的。

图片 4二、模型

 


  1. 保持ROOT APPLICATION MODULE

1.
模封装了点名的用中之数据以及生意逻辑。它吧提供了诚实的商贸对象及商务服务的悬空。

默认情况下,当用户从一个页面转至另外一个页面时(如一个GET请求或一个JSP
FORWARD),OAF生成一个初页面,前一个页面的application
module被放走,一个初的实例从applicaiotn module池中变化。

留神:要完全正确和同等,本图需包括以下的兑现

只顾:OAF从不会释放于POST请求提交的application
module(除非您手工释放)。如:如果用户对一个表排序或以表里跳转(两单当后台提交form的动作)页面的application
module实例自动为保。

oracle.apps.fnd.framework.server.OADBTransactionImpl而不是oracle.apps.fnd.framework.OADBTransaction接口。

 

 

  1. 保页面间的APPLICATION MODULE
  1. Application
    Modules

方所说的场面可吃独立的、完整的任务。但对于由于多页面组成的一个任务还是基本上只涉页面并用一个业务之情况,不同之页面就必须关联到一个ROOT
APPLICATION实例。

一个BC4J应用模型是治本以及供BC4J模型对象的底蕴容器,在这个上下文中,同一任务之靶子是出于多方面关系的。例如:所有的BC4J对象都含一个均等任务的事务。甚至用户界面包括多个页面。

达成以上的气象,你得得:

所有的APPLICATION
MODULE都是oracle.apps.fnd.framework.server.OAApplicationModuleImpl的子类。

(1).  在差不多页面中也每个页面指定同一个root
application module。

每一个OAF页面都出一个事关到顶层REGION(pageLayout
region)的ROOT application module。这个root application
module提供了事务处理的上下文,封闭了数据库的连年。

(2).
通过点名URL参数retainAM=Y来设置application module retention标记。

(1).
如果多独页面在一个工作中,它们应共享一个root application
module。

对GET请求,这个符号是当初页面显示的时光给拍卖的(如上面所干的,OAF总是为POST请求保持与一个application
module,而不管retainAM参数)。

(2).
如果一个页面和其余页面没关系,它应当生出温馨的application module。

比方设为Y,前一个页面的application
module会被保存,如果设为N(或者无苟,视与也N),OAF会释放具有的application
module,包括先那些显式声明也保留的

只顾:一个root application
module可能嵌套多个application module(也堪又嵌套多重合)。

而吗可以当JSP FORWARD
的OAPageContext时设置是参数。

当这种气象下,root application
module可以拜它所嵌套的兼具的数据、对象和有的ROOT包含的参与同一个事务之旁对象。你可当公想创立重用的跟数据库交互的UI
region时用这个特点。

告诫:只以不同之页面关联和一个root
application
module是不够的。如果您忘掉了设置retainAM标志,每个页面会利用不同之application
module实例和业务,即使它关联到了同一个application module 类型。

 

顾:典型气象下,根据application
module池的状态,页面B 不可知获取物理上的页面A的application
module。但是,对象的状态会了重置就像建立一个初的等同。你可以看他是一个新的实例。

  1. Entity
    Objects(和Association Objects)实体和涉实体

同一的,如果您设置了retainAM标志吗Y,但是尚未以大半只页面关联到同一个application
module,你的大半独页面也会利用不同的application module和业务。

BC4J实体封装了关系到多少表行的商务规则(验证、动作相当)。如:OAFSample
Library包括了FWK_TBX_SUPPLIERS表,用来囤积供应商的定义。

 

我们可以呢夫表定义一个实体对象(SupplierEO),用来贯彻的有的商规则,新建、更新、删除一个供应商。

  1. 发生原则的保留/释放application
    module

留意:Entity
Object也可因视图、同义词和快照。

每当有些情形下,你恐怕用控制是否如保留或释放一个application
module。

OAF支持JAVA和PLSQL实体。

君得吧不同之application
module实现oracle.apps.fnd.framework.webui.OAReleaseListener接口。

你建之多数实体都应当是oracle.apps.fnd.framework.server.OAEntityImpl的子类。

提个醒:开发团队没得提拔之前,不应有用是接口。不正确的施用这个接口会招致内存泄漏。

以数据库及实业之间是一定之干,所有的ORACLE
Applicaiotn 实体都应有包括其关联的说明的所有列。

 

实体使用声明来在她的属性和点名的数据列之间映射,来自动实现查询、插入、更新和去。大多数情况下,你得加上验证逻辑。

  1. 显式释放application moudule

实体可以给其他要与申交互的次序用(不仅是OAF),这样一来,就得考虑到所有的认证规则以便客户端就无须再关注这些了。

突发性你也会怀念显式的自由一个root
application
module,特别地,你于页面控制器中调用OAPageContext.releaseApplicationModule()方法,

 

OAF将见面同样完成页面显示就放页面的root
application module,而不用等下一个application module请求。

  1. Association
    Objects(关联实体)

 
图片 53. Root Application Module保留用例

苟您有一个苛的实体(如三叠采购定单,在峰、行、发运地之前是相同对几近的涉),你可以采用association
object来定义实体间的干,


汝可以定义弱连接(一个定单引用了曾存在的供应商)和赛连接(一个定单包括它的实践,行不克独立于头是)。

下表描述了applicatoin
module保留或自由的提议

 

图片 6

  1. View Objects(and view
    Links)视图对象和视图连接

 

以简约的情形下,一个BC4J视图对象封装了一个数据库查询。查询执行后,一个视图对象循环访问结果集。结果集带有一个要么多独相图行,一个见到图行的不同属性对应数据库查询的实行。

图片 74.
Servlet Session

拥有的视图对象还是oracle.apps.fnd.framework.server.OAViewObjectImpl的子类。


每个视图对象还好配备用以下的法门来询问数据:

只要当JSP基础中涉嫌的,一个servlet
session是于同多元HTTP请求的连接动作过程中当浏览器与服务器之间保持状态的底体制。

(1).
属性对应SQL语句的排列(通常用于比小、只念之视图对象)

一个session可能当任意时候给应用服务器建立或者经行使、用户关闭浏览器、用户过来住。一个session通常对应于一个记名/退出过程,但是以OAF中并无是一心如此。

(2).
属性对应实体对象的特性(用于插入、更新、删除实体对象)

卿可以当servlet
session中缓存一个聊之而是保存的靶子(OAF中须是字符串、数字、日期),同一个session中另外页面还好看缓存中之数码。如:如果你认为从数据库中读取用户信息极耗费资源了,你可利用是措施

(3).
一些特性对承诺到实体,一些属性直接对诺SQL(用来增进实体对象的无可知由实体对象查询的旋数据,如出示的计算值)。

专注:只有当你待以不同root application
module的大半独页面被做客一个简易值的时节才得动用session缓存。

以OAF中,在下面的景况下会就此到视图对象。

君必牢记servlet
session数据是绝非为除掉的(当SESSION激活的时候)必须于显示的破除。这样的话,如果用户并未退而是略的刹车了,因为尚未再次好之轩然大波来释放内存,故session是最终一个取舍。

(1).
为详细的用户界面显示太优化的数额。如果用户界面支持实业对象的插、更新、删除,你应当采取视图对象来就这些职责。

提拔:有经历的JSP开发者可以见面疑惑为什么不用隐藏域,根据OAF当前底菜谱实现方式(一些菜单发送GET请求而未是POST请求),所以当您挑选一个食谱里,不容许连续向请求中上加值。

(2).
为建下拉列表建立查询,值列表和其余的界面组件。

如果如当SERVLET
SESSION中蕴藏、接收、删除值,查看OAPageContext
put*(),get*()和remove8()方法。

(3).
为商贸逻辑建立可行之“验证查询”。如:在打定单头实体对象吃,你可能使下一个证视图对象来博取是市定单的最大行号,以便让它可以被缓存而于新行插入时得加。

 

最终,你或许未只是待定义视图对象,还可能使吗它们编写代码。典型气象下,代码应该实现复杂的询问的数绑定并推行查询(所以视图对象理解怎么样询问其自己)。

图片 85. Oracle采用用户Session

 


  1. View
    Link(视图连接)

当用户登录到OAF中时常,OAF建立一个AOL/J
oracle.apps.fnd.common.WebAppsContext对象及因SESSION的cookie,一起保持利用的上下文信息,如当前任务、组织ID和用户信息相当。

即使如连接实体对象同,你也可创建视图对象的涉及,这叫视图连接。如:你当采办定单头视图对象与行视图对象期间建立了一个视图连接,这可用来当访问头的时光自动查询行。

1.
Cookie封存了session中的加密底重点信息,这是数据库中之一条龙数(特别的,这是一个servlet
session id,在已解密之form中,是在ICX_SESSIONS表中之主键)

 

2.
WebAppsContext从每个请求被接键值,使用它们来询问时之session状态。

  1. OADBTransaction
  1. 用户session关联到一个servlet
    session,但其发投机之生命周期和过特性。

设若齐图所示:OADBTransaction在你的型中的一个主干角色,它包裹了JDBC的数据库连接会话和root
application module的涉及。

(1). 一般景象下,用户session应该比servlet
session生命周期更丰富。

并且直接容纳了你建之享有实体对象(视图对象由root
application
module容纳,并在观图行中引用了实体对象)。你拿当您的型中健康下OADBTransaction,基于以下原因:

(2). 一个用户session可能涉嫌到几近个servlet
session(如果,如:当用户以成立一个光阴大丰富的表过程被,servlet
session超时了,然后还好以用户session超时事先继续工作)。

(1). 建立callable
statement来推行PLSQL函数的进程。

(3). 一个servlet
session可能涉及到大半只用户session(如:一个用户退,没有关窗口同时晚降落)。

(2).
访问session级别之采取及下文,如用户称、id、当前任务齐。

4.
假设用户session超时了,用户也从没停歇浏览器窗口(基于session的cookie也远非掉),也远非丁抹ICX_SESSIONS表的相应记录,用户就是得当登录后由上次停的地方继续做事。

(3).
如果需要履行NLS操作,如转换服务器时格式为用户时间格式,访问oracle.apps.fnd.framework.OANLSServices对象

只要你需要拜访用户session中之数据,你可OAPageContext(在控制器代码中)或者OADBTransaction(在范代码中)。

root application
module可以拜OADBTransaction。

 

 

图片 96. 使用达到下文

图片 103.
视图



当不可知顾OAPageContext时,你吗可以动用以上下文来存储状态(在JAVA
服务器层或者PLSQL代码中)。这样的话,你可以WebAppsContext.setSessionArribute(name,value)方法。

视图用来为用户格式化和出示模型数据。

 

  1. 概念页面

图片 117. 页面上下文

当规划时,你得运用声明的不二法门来树BEAN的构造。在oracle开发过程被,你拿对XML文件进行定义。当您安排及客户站点时,OAF从数据库中运作页面定义。


为简单说明,Jdeveoper定义的页面由REGION和ITEM组成。

历次收到及一个页面的恳求,OAF都起一个OAPageContext存储信息,直到新的页面就(特别之,OAPageBean建立OAPageContext,它至关重要是当页面后令打做作)

(1).
ITEM是一个简练的零件,如按钮、输入框、图下等无包括子元素的组件。

 

(2).
REGION是包括ITEM的器皿。如:header、表格或一定的布局组件。

图片 128.
告与页面边界

(3).
你定义之每个REGION和ITEM都生一个STYLE属性,用来指明OAF在运行时以谁WEB
EBAN对象来吧它实例化(这会指明产生什么要瓣HTML代码),


一经:如果您定义了一个STYLE为table的REGION,OAF会用oracle.apps.fnd.framework.webui.beans.table.OATablebean来实例化。

一个WEB应用的劳作单元是片请求/响应,浏览器发送请求,servlet处理这要并返一个应,响应的传递意味着一个请求的收尾,或者是一个呼吁的形成和新的恳求之前的交界。

(4).
所有的页面必须带有一个顶层的REGION(叫做root
region),它的STYLE是pageLayout,它是oracle.apps.fnd.framework.webui.beans.layout.OAPageLayoutBean的实例。

同样,当OAPageBean完成页面的拍卖,这吗是当前页面及新页面内的交界。

(5).
在Jdeveoper的页面树被的REGION和ITEM的逐条指明了以运作时补充加BEAN结构的职务。

就此,一个用户从页面X跳反到页面A,又逾反至页面B,这时我们发个别独请求边界:X和A之间,A和B之间。也起有限个页面边界:X和A,A和B。

生图显示了一个略页面的WEB
BEAN显示效果,你看的页面的签指明了WEB BEAN的名。

小情况下,请求与页面的鄂不相同,考虑以下情形:

若:一个下拉列表是oracle.apps.fnd.framework.webui.beans.message.OAMessageChoiceBean的实例,一个交由按钮是oracle.apps.fnd.framework.webui.beans.form.OASubmitButtonbean的实例。

用户从X到A

留意:下面图中之ITEM名称没有如约ORACLE应用命名标准来举行,只是被您明白WEB
BEAN的构造。

于A的时刻,在响应决定显示谁页面之前,用户选择了A的控件,所以,浏览器发送了一个请到A,当A处理了,就达了第一单页的分界。

 

在页面A的代码中,开发者估算用户选择了哪位控件发送JSP
FORWARD到页面B,因为我们无思再度显示A,所以不用反回HTTP响应,OAF开始拍卖页面B(包括建一个初的OAPageContext),一旦B处理到位,就达了次个页面边界。

  1. Attribute Sets
    属性集

为页面B必须出示为用户,故一个HTTP响应发送到浏览器,就交了请的鄂。

每个REGION和ITEM都足以利用性质集来继承一组属性,一个属性集是经过命名可选用的性之聚众,它可为任何UI对象下,包括region\item和另属于性集。

基于以下的缘由,明白这或多或少凡是特别重大的

随便何时你建一个以属性集的UI组件,你都足以覆盖其的持续的属性(尽管当时当OAF中凡不推荐的)。

1.
求参数是叫要的生命周期中,它可超过多只页面的边界。这对于那些认为一个告与一个页面相同之开发者来说有点意外,在JSP
FORWARD后呢休想说明要参数还存。如以下示例:

为说明及时一点,在用开发中,每个表格必须为他的各个一样排关联到属性集,这些性集如提醒标签、显示涨幅等。

(1).
用户选择了页面X中之连,转到页面A,页面A的URL包括参数foo=bar

(1).
在OAF的ToolBox示例中,有一个打定单表(FWK_TBX_PO_HEADERS),HEADER_ID是NUMBER类型的主键,也作购买定单号显示。

(2).
页面A发送一个到页面B的JSP
FORWARD,现在虽我们是于一个初的页面被,请求被还包括foo=bar

(2).
这个表格来一个干的特性集:FwkTbxHeaders,是一个XML包文件,里面连了富有的表列的性能(每一样列一个性质)。其中一个特性叫做HeaderId。

(3).
 如果您切莫思在jsp
forward后还包参数,你必须显式的掩盖其(注意你莫能够从呼吁被删除参数),如当您调用OAPageContext的setForward方法时若可重置参数,foo=X

(3). HeaderId属性设置Prompt为 Order
Number,Display Length为15。

提拔:将无欲的参数设为一个新值更可取,不要简单地以它要为“”。

(4).
当我们建一个页面包括采购定单的order number
这个ITEM时,我们呢应当指定属性集为/oracle/apps/fnd/framework/toolbox/attributessets/FwkTbxheaders/Headerid

2.
以在页面上下文与请之前从没一对一底涉及,对于自OAPageContext中访问请求参数,有人会感到困惑。只要记得每个页面是一个分明的实业,从她的“显示点”OAPageContext表示了一个求。

 

3.
当您进来及图的底细时,你会看页面和请求的鄂是肯定的出不同含义的钝化事件点。

  1. 组件重用

 

倘若想结页面中之共享对象,你可概括的继承其

图片 139.
请求

假使:在OAF的ToolBox示例中,我们建了一个通用的REGION(叫PoSummaryRN),所以这组件可以吃多独页面包含而不用重新写代码。


若补加一个region到页面,我们如果简单的起一个初的region,将Extends属性设为:/oracle/apps/fnd/framework/toolbox/tutorial/webui/PoSummaryRN

尽管是生命周期很缺,每个HTTP请求或建立一个目标。这个目标包括以下应用状态:

留意:这个共享的REGION在援它的页面中凡是勿能够修改的,所以于Jdeveloper的Structure面板中之灰色的。

所有的URL参数,不管是POST还是GET。

 

假若是POST请求,包括FORM中之数码。

  1. 数据源绑定

假设是POST请求,web
bean和波名称会波及到用户挑选的控件(如用户挑选了一个GO按钮,请求会席卷为之按钮命名的web
bean,所以你可以领略它们为依下了连是做出响应)。

对此来数据库交互(插入、更新、删除、查询)的BEAN,你还要指定一个数据源绑定到一个视图实例和关系的视图属性名称。这个绑定好重要,因为OAF用它来询问数据、写回用户输入的多寡。

为了看请求值,使用OAPageContext的getParameter*()方法。

(1). View Instance
Name指的凡当application
module中之视图对象(所有的视图对象还存活于application
module中并透过她的称来调用),

 

假设:如果一个SuppliersVO视图对象由页面中之root
application
module通过“MySupVO”来调用,则当此地而应有指定MySupVO这个名字。

图片 1410.
以隐藏域

(2). View Attribute Name
指的是投到列的视图属性。


万一:如果您的SuppliersVO有一个性“SupplierId”(映射到列SUPPLIER_ID),这里您应当指定“SupplierId”这个称号。

一个隐藏域是开发者在FORM中读取或写副数据工具,它不能够为用户访问。如同用户观看的FORM域一样,隐藏域也于付出时叫加到了要被。

 

而可经过以Jdeveoper中甄选item
style的formValue建立一个隐藏域。在运行时,它以oracle.apps.fnd.framework.webui.beans.form.OAFormValueBean来初始化。

  1. 概念菜单

 

卿应该使用oracle
application菜单与作用的表单中定义菜单。

图片 1511.
以JSP FORWARD和重定向时指定值

刚刚像OAF将概念之UI布局翻译成运行时的BEAN结构,它吧蕴含了菜单定义的WEB
BEAN。


 

当你显式的运OAPageContext
setForward*()或者OAPageContext.sendRedirct()方法转至一个初的页面时,你可以设定请求参数。

  1. 概念页面流

譬如说:假定有一个页面包括一个付出按钮,当用户点击时,我们纪念行使JSP
FORWARD转到B页面。页面A用同传递一个mode值给页面B(可以由不同的法门来拜会),所以她了解哪做

处理多页面事务流时,OAF提供了一个只是定义的(可客户化)给复杂的、硬编码的决定逻辑。

  1. 用户点击提交按钮。

 

2.
以页面A的控制器中处理者按钮,在processFormRequest方法吃调用OAPageContext.setForwardURL()。做呢一个道调用,设定参数queryMode=automatic。

  1. 客户化页面

3.
以页面B的控制器中,在processRequest方法被反省参数queryMode值,调用getParameter(“queryMode”)。

OAF也包罗了一个不过定义之客户化架构,叫做:OA
Personalization
Framework。这是为支持最终用户所待的客户化和成品污染输链(区域化和垂直化(没明白什么意思)等)。

4.
页面B控制器于是响应queryMode参数值为automatic,查询数据来显示页面。

留意:如您于开指南中的表现底,建立REGION和item声明比编程更可取。实际上,你该只有在匪克用声明的法来树的当儿才使用编程的计,这样客户就可知客户化你的页面了。

 

 

**图片 1612.
调用OAPageContext.putParameter()指定值
**

图片 174、控制器



OAPageContext包括putParameter()方法,在页面处理过程中,你可就此来传递值到web
bean结构被,或者采用jsp forward从一个页面传到下一个页面。

1.
控制器是用来响应用户之动作和定向应用的流向的。

设:一个顶层的region可能停一个价值到缓存中,它的子region可以引用。

控制器可以提到到视图的REGION级别,(很多景象下,任何的OAF
web
bean实现了oracle.apps.fnd.framework.webui.beans.OAWebBeanContainer接口,可以提到到控制器)。

提拔:这个跟JAVA SERVLET
2.1底HttpServletRequest.setAttibute()方法好相似,可以认为它做所以同。

而建之富有的控制器都应该吗oracle.apps.fnd.framework.webui.OAControllerImpl的子类。

 

乃可在控制器中落实WEB
BEAN的功力。

图片 1811.
设定URL参数

卿可以编写代码用来:


(1).
在运转时操作和初始化(包括可编程的您不克因宣称的措施建立的布局)

当在Jdeveloper中定义URL时您得指定要参数,或者以系的次中设置URL。

(2). 截取和拍卖用户事件一经依下按钮

警示:URL是发出长限制的,你应当小心的添加URL参数的数,尤其是杀丰富之下。因为URL是可见的,你应有加密敏感的价值,然后再次解密。

 

 

  1. 拍卖要

图片 1912. 态钝化模型(“Passivation”)

当浏览器为您的页面发布一个OA.jsp请求时:


(1).
oracle.apps.fnd.framework.webui.OAPageBean(主要的OAF页面处理类)使用页面名称来控制用哪个root
application module,然后从application module池中取出。

OAF是业务导向的,许多事情都超了多只页面。这些工作需要自然的状态来保存信息直到用户就任务。如:一个起市定单的的流程中,用户以率先页描述定单,在亚页输入一个要多个种类,在第三页提交前检查信息,这个市定单数据在每个浏览器提交的恳求中要让保存。

是application module
也于连池中取出JDBC连接,然后这个页面的事务处理的上下文就确定了。

HTTP协议是随便状态的,它不可知保留任何指定的状态呢不保险支持状态保存。而且,如果提供servlet
session的JVM实例失败了,或者servlet
session超时了,应用状态就丢掉了,等待的作业也不克回复。

(2).
用户的SESSION被验证,如果不行,显示登录的页面。

OAF,从另一方面来讲,当用户工作经常,合并了保留及还原客户端状态的能力,即使是servlet
session超时(以后的版本会提供JVM失败的支持)。

(3).
如果用户是卓有成效的,OAPageBean评估请求参数来确定当做HTTP
POST或GET来拍卖。

1.
封存应用状态到另外一个地方(在OAF中,是保留于数据库被)叫做钝化。

 

2.
于任何地方恢复行使状态叫做活化。

  1. 处理GET请求

特别之,OAF目前供了以下的状态管理特点:

当浏览器为服务器发送一个GET页面的乞求时(或者您手工的FORWARD),OAF使用可声明的UI定义来树立web
bean结构

可变的使,当资源消耗大高时,OAF保存空闲线程的状态,并以她的资源重新分配给其它线程,而不是新建一个资源实例。当空闲之线程激活时,保存的状态让恢复。简单说,资源会于JDBC连接、application
modules、用户session中重新分配。

(1).
OAPageBean调用页面的顶层pageLayout的bean的processRequest()方法,整个WEB
BEAN结构于递归的尽来初始化WEB BEAN(包括外关系的范组件):

Servlet session 超时回升,servlet
session会超时,而无用用户还开一个不形成的工作(将来这个特性会扩张及资中间层的破产支持)。

a. 每个web
bean实例化它的控制器(如果有话)并且调用控制器上之processRequest(OAPageContext,OAWebBean),

 

立马是一个你用来树立、修改你的页面布局,设置web
bean属性和履行手工的数码初始化的方法(如当你打开页面时若或而实践一个自动查询)。

图片 2013. Application Module
缓冲池

b. 一些错综复杂的web
bean(如:oracle.apps.fnd.framework.webui.beans.table.OATableBean和oracle.apps.fnd.framework.webui.beans.layout.OAPageLayoutBean)执行post控制器执行prepareForRendering()方法。


c. 每个web
bean都调用它的子类的processRequest()方法。

为提高性能及可变性,OAF缓冲了APPLICATION
MODULE,重用是比例建还实惠的不二法门。在简易的图景下:

(2).
oracle.apps.fnd.framework.webui.OAPageBean将web
bean结构交给uix并发送至浏览器。

  1. 每个JVM都生一个application
    module池管理器,里面含有和管制不同的application module池。

  2. 每个application
    module池包含了片application module的实例,

 

若,如果一个用使用了零星个root
application module,就生有限单application module池:

  1. 处理POST请求

oracle.apps.fnd.framework.toolbox.tutorial.server.Lession3AM和oracle.apps.fnd.framework.toolbox.tutorial.server.Lession4AM,

当浏览器发送一个POST请求到服务器

一般来说图。换句话说,每个root application
module都起一个池塘。

(1). OAPageBean检查看web
bean是否在于外存中,如果无(可能为资源被再度组织了,用户以了晚下降按钮,

  1. 于池子中的application
    module实例被设计改为可用之抑未可用的(当前给取走之)。

  2. 无非生root application
    module是放在池中之,嵌套的application module是叫root application
    module缓冲的。

要POST是由于一个会话框来之),那就算还树立web
bean的组织,像面执行GET时一致。

Thanks and Regards

(2).
OAPageBean在有着结构树被之bean上调用processFormDate(OAPageContext,OAWebBean),将form中的数量写入module(它调用pageLayout
region上之processFormData,

参照:红豆加奶 –
http://shaofeng.blog.51cto.com/3392077/655672

于是每个web
bean教递归的调用了她的子类的processFormData)。写副form数据及model自动的调用了属性级和实体级的证实。如果你抛来任何说明异常,执行会停止并显示错误信息。

图片 21

(3). 
如果当履processFormData()过程遭到莫死,OAPageBean调用所有的bean上之processFormRequest(OAPageContext,OAWebBean)方法,如上面所言。

是进程叫您的控制器对用户的动作作出响应。

(4). 如果无JSP
FORWARD或者重新定向,或者在processFormRequest()方法被从不怪,则页面被刷新。

 

  1. OAPageContext

当OAF接收至一个OA.jsp请求,OAPageBean建立一个oracle.apps.fnd.framework.webui.OAPageContext,这个看似才以页面处理过程中才有。

方所说的老三个重大措施(processRequest(),processFormData()和processFormRequest())都发出一个OAPageContext参数,你编的另外控制器总是要下此至关重要之好像。

假设达到图所示,OAPageContext同时引述了request和root
applications mudule。

实际上OAPageContext被付你的每个控制器的履行办法,在底下的天职中公用祭OAPageContext:

 

  1. 看请求参数

兴许太要是,这是一个君用来经getParameter(String)方法来读取请数据的好像(请求包括URL中的参数,如果是POST,任何的名称值和事件还提到到用户之动作)。

提醒:对于页面被的不等的WEB
BEAN(按钮、输入框等),传至getParameter()的名称值都通过你在页面中定义之ID来分配。

设若:如果用户按了一个为“GoButton”的按钮,你得于Jdeveloper在描绘以下的控制器代码:

processFormRequest(OAPageContext pageContext, OAWebBean webBean)  {  
   if (pageContext.getParameter("GoButton") != null)  
   {  // The user pressed the "Go" button, do something...  } 
} 

 

  1. 访问root application
    module

OAPageContext缓存了一个针对root application
module的援,它提供了走访它的视图对象及事务。

倘急需访问application mudule:

processFormRequest(OAPageContext pageContext, OAWebBean webBean) {  
   OAApplicationModule am =   (OAApplicationModule)pageContext.getRootApplicationModule();
} 

 

8.
导航介绍

汝以这仿佛的章程来喻OAF执行一个JSP
forward。如:

processFormRequest(OAPageContext pageContext, OAWebBean webBean){  if (pageContext.getParameter("CreateButton") != null)  { 
  // The user pressed the "Create Supplier" button, now perform a JSP forward to 
  // the "Create Supplier" page.
  pageContext.setForwardURL("OA.jsp?page=/oracle/apps/dem/employee/webui/EmpDetailsPG",  
                            null,   
                            OAWebBeanConstants.KEEP_MENU_CONTEXT, 
                            null,  null,  
                            true, // Retain AMOAWebBeanConstants.ADD_BREAD_CRUMB_YES, // Show breadcrumbsOAWebBeanConstants.IGNORE_MESSAGES); } } 

 

9.
走访使及下文信息

像模型中的OADBTransaction,OAPageContext提供了走访servlet
session级别之oracle应用上下文信息,如用户称、id、当前任务齐。如下面代码显示怎么得到用户称;

processRequest(OAPageContext pageContext, OAWebBean webBean){   
  String userName = pageContext.getUserName();
}

 

图片 225、 Web
bean 架构


  1. 有着的WEB
    BEAN继承了UIX架构中之应和的bean。

如一个OATableBean继承了oracle.cabo.ui.beans.table.TableBean。

每个OAF web
bean也落实了扳平组接口,这些接口定义了OAF加到UIX bean中的所作所为。

(1).
Oracle.apps.fnd.framework.webui.beans.OAWebBean

概念了装有的WEB
BEAN的通用的核心之作为。

假设:不同于其它行为,它定义了processRequest,processFormData和processFormRequest方法,这些艺术都以不同之bean中出落实。

(2).
Oracle.apps.fnd.framework.webui.OAWebBeanConstants:

在视图和控制器中动用的同等组常量。

(3).
Oracle.apps.fnd.framework..webui.beans.OAWebBeanData:

概念了通用的客户化定义和数据源管理作为。

(4).
Oracle.apps.fnd.framework.webui.beans.OAWebBeanContainer:

概念了拥有的web
bean的举行为容器的特征。如:所有的布局web
bean都实现者接口。只有实现了这个接口的bean才得提到到控制器。

(5). OAWebBean<Type>:

概念了于OAF上下文中之bean中初的一言一行。

如:OATableBean实现了oracle.apps.fnd.framework.webui.beans.OAWebBeanTable接口。

 

  1. 内部bean结构

每个web
bean都维护其自己以下的音信:

_indexedChildren 子web bean

_namedChildren UIX指定的子web
bean

_attributes web
bean的特色(描述性属性),如下图所示

 

  1. 多少绑定值

当无是高达图所著之情事,OAF web
bean属性实际当做数据绑定值来贯彻。

意思是价值由特定的于运转时处理组件的数据源提供。

 

  1. 实现

当页面实现时,UIX架构处理web
bean结构来生成html。

本着其余web
bean属性,当以其交给一个落实上下文(实现上下文是UIX需要处理绑定数据的有所的音)时,UIX调它的getAttributeValue()方法。

对此一个加的习性,如:实现上下文知道哪位视图对象、视图属性和眼前实施是啊。

多少绑定值使用实现上下文提供的这些信息来打探数据源,并返实际的值,所以其会生成对应的HTML。

 

图片 236、oracle.apps.fnd.framework


1.
oracle.apps.fnd.framework

包于model和用户界面或视图代码中可以安全访问的近乎以及接口。

假定:如果您于页面中假如顾一个root
application
module,你若采取oracle.apps.fnd.framework.OAApplicationModule接口(你永远不见面访问一个客户端的兑现)。

骨子里情况下,这个保险吗席卷:

(1). 你也许要摒弃来底具备的怪

(2).你用来国际化操作的近乎:OANLSServices

 

2.
oracle.apps.fnd.framwwork.server

连了在mvc架构中实现model的类似的接口

这些类似是故来叫客户端用户界面(不单单是OAF的html页面)使用的,它不该直接引用oracle.apps.fnd.framework.webui包和子包中之好像与接口,或者其它利用指定的WEBUI包和子包。

当起一个OAF应用模型时,你该利用这包中的类似设未是其的存续的好像。

警戒:不要当控制器和视图对象中调用这个包中的类似。

 

3.
oracle.apps.fnd.framework.webui

连了建及操作OAF
html用户界面的为主类。

部分常用之近乎以及接口包括:

(1). OAController

(2).
OAPageContext

(3).
以转包被之在bean中之所有类

警告:不要以model代码中调用这个包中的切近。

 

4.
oracle.apps.fnd.framework.webui.beans

连了无可知入多样变化bean子包的用户界面组件类(如:图像、静态的文书、键弹性域、说明性弹性域)。

若应有以编排用户界面的得编程的控制器的时候利用这些近似。

以此保险吗包罗了着力之为抱有的WEB
BEAN实现的OAF接口。

此包中的类似以及它们子包中之类似对诺到它实现的uix组件,如下表。当起OAF应用页面时,你应该总是以OAF类除非您想利用一个囊括以UIX中设OAF不支持的初特点。

留意:OAF类总是为卿当Jdeveloper中声称的MDS实例化。

图片 24

警戒:不要在model代码中调用这个包中的近乎。

 

5.
oracle.apps.fnd.framework.webui.beans.form

连了html form的零部件的web
bean类,包括提交按钮和输入组件(多选框、单选取框、文本框等)。

你该当编排一个用户界面控制器的早晚下这些看似。

留神:对于许多是包中的web
bean,有一些变量在oracle.apps.fnd.framework,webui.message包中(这些message
web bean可以显示错误、信息、警告的图标和说明信息,而此包中web
bean不能够)。

当您于Jdeveloper中确立页面时,OAF自动的啊当下点儿独保险着之零部件实例化message
bean。你应该只有在脚的情景被动用这包中的类似:

(1). 一个像样没有message
bean(如:OASubmitButtonBean只在这个保险吃存在)

(2). 你莫欲采用message bean

提个醒:不要在model代码中调用这个包中的类。

 

6.
oracle.apps.fnd.framework.webui.include

包括OAF中用户界面的壮大web
bean(servlet\jsp\html)。

君该以编排用户界面控制器时行使这些看似。

警示:不要当model代码中调用这个包中的好像。

 

7.
oracle.apps.fnd.framework.webui.beans.layout

概括OAF页面的布局web
bean。包括特定的布局要hide/show,容器,列表,头,标准的单列或双列模板等。你应当在编辑用户界面控制器时以这些近似。

提个醒:不要当model代码中调用这个包中的接近。

 

8.
oracle.apps.fnd.framework.webui.beans.message

概括好来得错误、警告或信息之HTML
FORM控件。如用户在一个文本框中输入了错的价,一个荒谬图标会显示在其的标题下面。你当在编辑用户界面控制器时行使这些近似。

瞩目:这个包中的可怜多类了包在oracle.apps.fnd.framework.webui.beans.form包中,但从没出示图标和信之机能。

警戒:不要在model代码中调用这个包中的近乎。

 

9.
oracle.apps.fnd.framework.webui.beans.nav

包了用户界面导航的零部件(连接、树、菜单、快速连接等。)你应当于编写用户界面控制器时采用这些近似。

提个醒:不要以model代码中调用这个包中的接近。

 

10.
oracle.apps.fnd.framework.webui.beans.table

席卷了表格和培养表格的web
bean。它可坐表的款式显得数据。你应有于编写用户界面控制器时行使这些看似。

警戒:不要在model代码中调用这个包中的类。

 

11.
oracle.apps.fnd.framework.webui.laf

包了可决定HTML外观(包括页面风格)和上下文行为之家伙。

 

Thanks and Regards

转载: c1275671283 –
http://shaofeng.blog.51cto.com/3392077/655665

图片 25

相关文章