关于Immediate属性的使用(注意)----ADF Faces入门(文档阅读)

来源:互联网 发布:vscode debug npm 编辑:程序博客网 时间:2024/06/01 09:49

Immediate属性是个神秘而又好用的东西。下列简称为I

你可以使用I去在生命周期的Apply Request Values阶段使对组件的访问升级。当actionSource组件被设置为I的时候,事件会被交付于Apply Request Values阶段而不是Invoke Application。actionListener会调用Render Response阶段,并且validation和model update两个阶段会被跳过。

假定你设置一个取消按钮为I,使action返回一个字符串并且导航回去到前一个界面。由于取消按钮是设置为I的,当用户点击取消按钮的时候,所有的验证都会被跳过,并且没有任何页面输入的值更新到model,用户就可以预期的导航回去了。

PS:话说来,即使一个按钮不进行任何导航,如果它被设置为I的话,它同样会跳过生命周期中间的几个阶段,直接到最后一步,XXXXXX阶段都会被跳过,因此不会有任何新的值被push到服务器。

生命周期流程如下:

和命令组件一样,对于那些可关闭的组件,editableValueHolder的组件等等,事件同样在Apply Request Values阶段交付。然而对于editableValueHolder组件来说,不同于其他组件,它不是跳过验证,转换等步骤,而是在生命周期中提前执行了(原先是在Process
Validations阶段之后),在Apply Request Values阶段就执行了,因此没有任何生命周期的步骤被跳过。

在一个或多个组件需要在别的组件之前进行验证的情况下,设置I是非常有用的。在相同的页面当中,如果被设置I的页面验证不通过了,其他组件就可以不用进行验证了,因此也就减少了页面中显示的错误的数量。

性能提示:在某些地方设置I会提高性能。

1。当你创建一个导航链并且拥有一个commandNavigationItem在导航组件中的时候,你需要去设置I去避免当导航到下一页的时候处理当前页的数据。

2。如果有一个input组件需要在所有其他组件之前进行验证,I应该被设置为true。任何错误可以在生命周期中提前察觉并且避免了其他额外的处理。看下面例子吧:

有两个输入框以及两个按钮组成的form,第一个输入框以及按钮是作为输入查询信息以供查询的的,他两的I被设置为true,另一对输入框及按钮是日期用以输入日期用以save

我们这个form在运行时候,根据用户输入的数据不同,生命周期的走势如何吧

操作步骤:

1.输入binky到日期输入框(不合法的数据)

2.输入dress到查询输入框

3.点击查询按钮执行查询dress

4.点击保存按钮执行保存binky作为日期

表示不解,上面生命周期走向!!!!

 在相同页面中对editableValueHolder 以及actionSource组件设置I属性的时候,应注意以下问题:

1.如果一个editableValueHolder组件被标记I属性为true,它就会在Update Model阶段之前执行。这个时候当有一个I的actionSource组件需要从 一个editableValueHolder组件中获取数据会出现问题,正如editableValueHolder输入的数据在Update Model Values之前是不合法的。如果你有一个I的actionSource组件,并且这个组件需要获取数据,这时候也将需要的数据的editableValueHolder 区域也设置为I。然后,你可以对editableValueHolder 调用getValue方法,这时候会返回local值。它还没被pushed到服务器端,但是它在组件中是合法的。

2. 如果一个为I的editableValueHolder组件验证失败,所有为I的actionSource组件仍然会执行。

 

 

原创粉丝点击