马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622 。
您需要 登录 才可以下载或查看,没有帐号?注册
x
然而,在某些情况下,请求和页面边界不是相同的。比如在下面的JSP服务器端重置的情况下:
l 和上图所示的那样,用户从页面X导航到页面A.
l 在页面A中,其页面代码必须确定在响应前将显示哪个页面。浏览器发送一个请求到页面A,而OA Framework将会进行处理,并为页面生成一个OAPageContext对象。一旦页面A完成处理,第一个页面的边界就像下图所示一样到达。
l 在页面A的代码内,开发者确定哪个控件被用户选择并且发送一个JSP Forward到页面B。如果我们不向显示页面A,那么将不在这个点提供一个HTTP响应,OA Framework将开始处理页面B,包括为该页面生成一个新的OAPageContext。一旦页面B完成处理,第二个页面的边界将被达到。
l 如果页面B必须被显示给用户,一个HTTP响应被发送到浏览器。则请求的边界就达到了。

理解这其中的差别是非常重要的,有以下几个理由:
l 请求参数存活于请求的整个生命周期中-即使跨越多个页面边界。这可能对于那些简单的认为请求和页面是一回事的开发人员来说是很难理解的。因此不能在执行了服务器端重置(JSP Forward)后说明请求请求参数“hanging around”。可以来看一下下面的例子:
Ø 用户点击了页面X中的链接导航到页面A。页面A的URL中包含了参数foo=bar。
Ø 页面A通过一个JSP Forward,导航到页面B。即使在新的页面中,请求中仍旧包含foo=bar。
Ø 如果你不想在JSP Forward中存留一个参数值,你必须要显式的替换它。在这种情况下,调用OAPageContext的setForward()方法时,简单的将值重置即可,比如foo=x。
注:实际上不能从请求中删除参数。
说明:对于不希望获取的参数值,可以采取“忽略”值来进行替换。而不要简单将值置为空。
l 既然页面上下文和请求之间不存在一对一的映射,通过OAPageContext方法来访问请求的参数可能会令人在概念上产生混淆。只虚记住每个页面是一个独立的实体,并且它来自于“视点”(point of view),而OAPageContext表示请求。
l 当你进入后续的OAF开发课程第六章时,你就会明白页面和请求边界是带有不同钝化意义的动作点。
1.1.1. 请求
为每个HTTP请求生成的对象虽然生命周期都非常短,但是这些对象均包含了如下的应用信息:
ü URL参数,不论浏览器发送的请求是POST类型的还是GET类型的
ü 如果浏览器发送的是POST请求:所有form域的数据,诸如用户输入的文本框的数据或开发人员存储在隐藏域中的数据
ü 如果浏览器发送的是POST请求:web bean和于用户的动作进行关联的事件名称。比如,如果用户点击“Go”按钮来执行一个查询,则请求包括了这个按钮对应的web bean的名称,据此你就可以确定该怎么进行处理和响应请求。
访问请求中的这些信息时,使用OAPageContext.getParameter*()方法。你将不会直接和请求打交道。
给请求中的变量赋值(页面间通信的首选方法),你可以利用下面的方法。请参考“Implementing the View”和“Implementing the Controller”章节中的内容来学习如何使用请求中的参数来完成工作。
Use Hidden Fields
隐藏域做为一个在form中获取/存储变量值的工具而存在。在POST类型的请求中,form中隐藏域的值也与form其他显示域一样,将域名称做为参数名,域值做为参数值通过请求进行传送。
你可以通过在Jdeveloper中选择formValue类型的项来创建一个隐藏域。在运行时,通过实例化oracle.apps.fnd.framework.webui.beans.form.OAFormValueBean实现。
Specify Values During JSP Forward/Client Redirect
当你显式的通过OAPageContext.setForward*()方法服务器端重置或通过OAPageContext.sendRedirect()方法客户端重定向打开一个新页面时,你可以有选择地设置请求的参数值。
比如说,页面A包含了一个提交按钮。当该按钮被点击时,用户通过JSP Forward方式导航到页面B。页面A需要传递一个名为“mode”的值给页面B,可以通过以下过程来实现这个动作:
2、在页面A的控制器中处理该按钮的点击之后,调用processFormRequest()方法的OAPageContext.setForwardURL()。做为方法执行的一部分,我们传递一个名称为queryMode的请求参数并将其值设为automatic。
3、在页面B的控制器中,在processRequest()方法中通过调用getParameter(“queryMode”)方法来检测queryMode参数的值。
4、页面B的控制器将根据queryMode的值进行判断,如果该参数值为automatic,则立即对数据源进行查询并将结果显示在页面中。
Specify Values by Calling OAPageContext.putParameter()
OAPageContext包括putParameter()方法,可以实现在页面处理过程中将参数值传递到页面的web bean层次中去。通过调用putParameter()方法确定的参数值不会加进请求中去,而是存储在特定的页面缓存中。
说明:以上的特性与Java servlet2.1 API中的HttpServletRequest.setAttribute()有很多相似之处。
Set URL Parameters Declaratively
可以通过在Jdeveloper中显式定义URL或者在关联了URL的web bean上通过编程方式来设定URL。
注意:URL对空格是敏感的;要注意添加的众多的URL参数,特别是长度。而且URL对用户是可见的,基于安全考虑,要对敏感的参数值进行加密操作,正如后面在OAF开发课程第三章中描述的那样。
附件:
|