控制器

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

控制器可以关联到视图的REGION级别,(很多情况下,任何的OAF web

bean实现了oracle.apps.fnd.framework.webui.beans.OAWebBeanContainer接口,可以关联到控制器)。

你建立的所有的控制器都应该为oracle.apps.fnd.framework.webui.OAControllerImpl的子类。

你可以在控制器中实现WEB

BEAN的功能。你可以编写代码用来:

l

在运行时操作和初始化(包括可编程的你不能以声明的方式建立的布局)

l

截取和处理用户事件如按下按钮

处理请求

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

1、

oracle.apps.fnd.framework.webui.OAPageBean(主要的OAF页面处理类)使用页面名称来决定需要哪个root

application module,然后从application

module池中取出。这个application

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

2、

用户的SESSION被验证,如果无效,显示登录的页面。

3、

如果用户是有效的,OAPageBean评估请求参数来确定当做HTTP

POST或GET来处理。

处理GET请求

当浏览器向服务器发送一个GET页面的请求时(或者你手工的FORWARD),OAF使用可声明的UI定义来建立web

bean结构

1、

OAPageBean调用页面的顶层pageLayout的bean的processRequest()方法,整个WEB

BEAN结构被递归的执行来初始化WEB

BEAN(包括任何关联的模型组件):

l

每个web

bean实例化它的控制器(如果有的话)并且调用控制器上的processRequest(OAPageContext,OAWebBean),这是一个你用来建立、修改你的页面布局,设置web

bean属性和执行手工的数据初始化的方法(如当你打开页面时你可能要执行一个自动查询)。

l

一些复杂的web

bean(如:oracle.apps.fnd.framework.webui.beans.table.OATableBean和oracle.apps.fnd.framework.webui.beans.layout.OAPageLayoutBean)执行post控制器执行prepareForRendering()方法。

l

每个web

bean都调用它的子类的processRequest()方法。

2、

oracle.apps.fnd.framework.webui.OAPageBean将web

bean结构交给uix并发送到浏览器。

处理POST请求

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

1、

OAPageBean检查看web

bean是否存在于内存中,如果没有(可能因为资源被重新构造了,用户按了后退按钮,或者POST是由一个对话框发出的),那就重新建立web

bean的结构,像上面执行GET时一样。

2、

OAPageBean在所有结构树中的bean上调用processFormDate(OAPageContext,OAWebBean),将form中的数据写入module(它调用pageLayout

region上的processFormData,所以每个web

bean教递归的调用了它的子类的processFormData)。写入form数据到model自动的调用了属性级和实体级的验证。如果你抛出任何验证异常,执行会停止并显示错误信息。

3、

如果在执行processFormData()过程中没有异常,OAPageBean调用所有的bean上的processFormRequest(OAPageContext,OAWebBean)方法,如上面所讲。这个过程让你的控制器对用户的动作作出响应。

4、

如果没有JSP

FORWARD或者重定向,或者在processFormRequest()方法中没有异常,则页面被刷新。

OAPageContext

当OAF接收到一个OA.jsp请求,OAPageBean建立一个oracle.apps.fnd.framework.webui.OAPageContext,这个类只在页面处理过程中才存在。上面所说的三个关键方法(processRequest(),processFormData()和processFormRequest())都有一个OAPageContext参数,你编写的任何控制器总是要使用这个关键的类。

如上图所示,OAPageContext同时引用了request和root applications

mudule。实际上OAPageContext被交给你的每个控制器的执行方法,在下面的任务中你将使用OAPageContext:

访问请求参数

可能最重要是,这是一个你用来通过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...

}

}

访问root application

module

OAPageContext缓存了一个对root application

module的引用,它提供了访问它的视图对象和事务。如果需要访问application

mudule:

processFormRequest(OAPageContext pageContext, OAWebBean webBean)

{

OAApplicationModule am =

(OAApplicationModule)pageContext.getRootApplicationModule();

}

导航介绍

你使用这个类的方法来告诉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 AM

OAWebBeanConstants.ADD_BREAD_CRUMB_YES, // Show breadcrumbs

OAWebBeanConstants.IGNORE_MESSAGES);

}

}

访问应用上下文信息

如同模型中的OADBTransaction,OAPageContext提供了访问servlet

session级别的oracle应用上下文信息,如用户名、id、当前职责等。如下面代码显示如何取得用户名:

processRequest(OAPageContext pageContext, OAWebBean webBean)

{

String userName = pageContext.getUserName();

}

Web bean 架构

所有的WEB

BEAN继承了UIX架构中的相应的bean。如一个OATableBean继承了oracle.cabo.ui.beans.table.TableBean。

每个OAF web

bean也实现了一组接口,这些接口定义了OAF加到UIX

bean中的行为。

l

Oracle.apps.fnd.framework.webui.beans.OAWebBean定义了所有的WEB

BEAN的通用的核心的行为。如:不同于其它行为,它定义了processRequest,processFormData和processFormRequest方法,这些方法都在不同的bean中有实现。

l

Oracle.apps.fnd.framework.webui.OAWebBeanConstants:在视图和控制器中使用的一组常量。

l

Oracle.apps.fnd.framework..webui.beans.OAWebBeanData:定义了通用的客户化定义和数据源管理行为。

l

Oracle.apps.fnd.framework.webui.beans.OAWebBeanContainer:定义了所有的web

bean的做为容器的特点。如:所有的布局web

bean都实现这个接口。只有实现了这个接口的bean才可以关联到控制器。

l

OAWebBean:定义了在OAF上下文中的bean中固有的行为。如:OATableBean实现了oracle.apps.fnd.framework.webui.beans.OAWebBeanTable接口。

内部bean结构

每个web

bean都维护它自己以下的信息:

_indexedChildren

子web

bean

_namedChildren

UIX指定的子web

bean

_attributes web

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

数据绑定值

作为不是上图所示的情况,OAF web

bean属性实际作为数据绑定值来实现。意思是值由特定的在运行时处理组件的数据源提供。

实现

当页面实现时,UIX架构处理web

bean结构来生成html。

对任何web

bean属性,当将它交给一个实现上下文(实现上下文是UIX需要处理绑定数据的所有的信息)时,UIX调它的getAttributeValue()方法。对于一个给定的属性,如:实现上下文知道哪个视图对象、视图属性和当前行是什么。数据绑定值使用实现上下文提供的这些信息来询问数据源,并返回实际的值,所以它能够生成相应的HTML。

oracle oaf结构,OAF文档四:分析OAF页面(二)相关推荐

  1. AlexNet做文档布局分析 (版面分析)数据集

    向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程   公众号:datayx 文档布局分析 (Document Layout Analysis) 是识别和分类文本文档的扫描 ...

  2. 文档布局分析 扭曲文档图像恢复

    向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程   公众号:datayx 对文本进行OCR前,必须分析和定义文档的逻辑结构.例如文本块.段落.行的位置:是否有应该重建的 ...

  3. 基于OpenVINO与PP-Strucutre的文档智能分析 - 飞桨AI Studio

    ★★★ 本文源自AlStudio社区精品项目,[点击此处]查看更多精品内容 >>> 基于OpenVINO与PP-Strucutre的文档智能分析 本示例包含以下部分组成: 项目说明 ...

  4. Oracle 12c RAC 安装文档

    首先,谢谢原作者:此文为转载的文章,现将原地址贴出如下: Oracle 12c RAC 安装文档​www.cnblogs.com/leohahah/p/9488963.html 更多精彩Zabbix文 ...

  5. Oracle单实例通过DG迁移至RAC集群(Oracle 11g 超详细文档)

    实验:Oracle单实例通过DG迁移至RAC集群(Oracle 11g 超详细文档) 步骤1:Oracle单实例搭建 1. 系统环境检查 2. 创建用户.组,配置环境变量.安装目录 3. 安装Orac ...

  6. 利用java实现android项目结构API文档

    利用java实现android项目结构API文档 2012-11-16 快速生成API文档列表 在android项目中的.CLASSPATH文件里添加android.jar路径 例如: <cla ...

  7. AI论文解读丨融合视觉、语义、关系多模态信息的文档版面分析架构VSR

    摘要:文档版式分析任务中,文档的视觉信息.文本信息.各版式部件间的关系信息都对分析过程具有很重要的作用.本文提出一种融合视觉.文本.关系多模态信息的版式分析架构VSR. 本文分享自华为云社区<论 ...

  8. 论文解读丨图神经网络应用于半结构化文档的命名实体识别和关系提取

    摘要: 随着用于传递和记录业务信息的管理文档的广泛使用,能够鲁棒且高效地从这些文档中自动提取和理解内容的方法成为一个迫切的需求.本次解读的文章提出利用图神经网络来解决半结构化文档中的实体识别(NER) ...

  9. python连接mysql输出数据库结构docx文档

    python连接mysql输出数据库结构docx文档-Python文档类资源-CSDN下载

  10. 文档布局分析工具之DIVA

    论文:Open Evaluation Tool for Layout Analysis of Document Images Github:https://github.com/DIVA-DIA/DI ...

最新文章

  1. Milking Cows 挤牛奶
  2. Linux Ubuntu上架设FTP
  3. 矩阵的直接LU分解法
  4. 【Leetcode | easy】有效的括号
  5. 1365. 有多少小于当前数字的数字(哈希表)
  6. function implemented in Scala - compiled java code - some closure example
  7. ecs服务器数据迁移_某国际物流集团的云迁移解决方案
  8. 当前服务器文件夹不存在,供应商文件夹不存在,无法创建
  9. Bootstrap HTML 编码规范之JavaScript生成的标签
  10. Python学习手册之内部方法、操作符重载和对象生命周期
  11. [Oracle] 分页查询
  12. linux 环境下git的安装与配置
  13. 看看人家那后端API接口写得,那叫一个牛逼,再看看我的,像坨屎!
  14. 第18次Scrum会议(10/30)【欢迎来怼】
  15. LC谐振高频逆变电路
  16. 2、sudo时候出现no valid sudoers sources found, quitting
  17. h5页面的写法_一步一步教你如何开发h5页面
  18. 蛋白质结构预测 AlphaFold2、ColabFold、Uni-Fold、ESMFold
  19. 2018年1月23日腾讯SNG-IMWeb前端工程师 电话远程面试记录
  20. python+IDM实现快速批量化下载 (解决IDM批量化下载文件类型出现Error问题)

热门文章

  1. Python爬取2万条相亲网站数据!看看中国单身男女都在挑什么!
  2. [3D游戏开发实践] Cocos Cyberpunk 源码解读-一文搞定延迟渲染管线原理与实践
  3. java控制台输出版多人聊天室
  4. VC++函数ATOM MyregisterClass(HINSTANCE hInstance)
  5. Futter安装配置
  6. Windows 安装 nvm
  7. 现象与本质--------开垦供应链金矿:策略、精益、优化
  8. Unity | 快速集成华为AGC云存储服务
  9. 解决ipset重启服务器 ipset list黑白名单需要重新建立问题
  10. 【橙子日记30】从零开始的毕业设计