理论教育 组件控制器的生命周期与组件实例息息相关

组件控制器的生命周期与组件实例息息相关

时间:2023-05-19 理论教育 版权反馈
【摘要】:组件控制器的生命周期与其对应的组件实例的生命周期是一致的,甚至大部分情况下,可以说组件控制器的生命周期决定了整个组件的存在,即组件控制器被调用并实例化,同时创建相应组件的实例,最后在控制器退出时销毁组件实例。1)组件控制器的初始化:“Component Controller”的“wdDoInit”方法。

组件控制器的生命周期与组件实例息息相关

组件控制器的生命周期与其对应的组件实例的生命周期是一致的,甚至大部分情况下,可以说组件控制器的生命周期决定了整个组件的存在,即组件控制器被调用并实例化,同时创建相应组件的实例,最后在控制器退出时销毁组件实例。以下是整个组件控制器的生命周期中可能会执行到的标准方法。

●wdDoInit():这是所有控制器(包括组件控制器和视图控制器)的默认初始化方法,且在实例初始化时仅执行一次,因此对于控制器中数据的初始化或者变量的默认值设定都在这个方法中完成。

●wdDoExit():与wdDoInit()相对,该方法在每个控制器结束时执行。视图的退出场景有很多,包括视图失效、窗口关闭、视图切换等。该方法也是每个控制器实例的出口。

●wdDoPostProcessing():该方法仅在组件控制器中存在。由于在复杂的Web Dynpro应用中(如跨组件或跨工程的方法调用),数据可能来自于多个组件,因此为了程序更有效地运行,该方法可以实现相关代码,使其在数据处理之前就对数据提前进行有效性验证。

●wdDoBeforeNavigation():该方法也仅在组件控制器中存在。当一个视图控制器触发一个outbound的插口时,它并不是一个人在战斗,很可能有许多视图控制器都触发了视图切换的动作,这些请求随后会进入一个处理队列,而这个方法可以实现相关代码,对队列中导航之前发生的逻辑动作进行处理(如导航事件优先级)。

●isCurrentRoot布尔参数:由于上述两个方法会涉及多个组件的交互,而仅有Web Dyn⁃pro运行时默认显示的接口视图对应所在的组件才能被称为根组件(root component),因此该参数用于区分此类组件。

组件中视图、窗口、组件控制器的标准初始化方法执行顺序如下。

1)组件控制器的初始化:“Component Controller”的“wdDoInit”方法。

2)默认窗口的初始化:“Window”的“wdDoInit”方法。

3)默认视图的初始化:“View”的“wdDoInit”方法。

4)视图的默认校验方法:“View”的“wdDoBeforeAction”方法。

5)视图UI元素对应的方法:自定义“Action”。(www.daowen.com)

6)视图的默认变更方法:“View”的“wdDoModifyView”方法。

注:更详细的视图标准方法执行顺序请参考3.1.1节的开发实例。

开发实例:

1)切换到组件控制器wdDoInit(),右击“Dynp01Comp Component Controller”,在弹出的快捷菜单中选择“Open”→“Java Editor”,并添加以下代码,如图3-164所示。wdComponentAPI.getMessageManager().reportSuccess("Executer Component Controller wdDoInit():");

978-7-111-58177-2-Chapter03-181.jpg

图3-164 添加代码

2)保存所有修改,重新编译、运行之后,即可进行“Dynp01App”应用的运行测试,运行效果如图3-165所示。

978-7-111-58177-2-Chapter03-182.jpg

图3-165 运行效果

通过图3-165的运行结果可以看到,当程序运行并创建一个组件的实例之后,会先执行组件控制器初始化方法,再执行窗口的初始化,最后执行视图的初始化。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈