`
dengyin2000
  • 浏览: 1225584 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

T5这么多的Page Lifecycle method, 应该怎样使用?

阅读更多

Tapestry5种大概有以下Page Lifecycle methods.

void pageLoaded();
void pageAttached();
void pageDetached();

void/Object onActivate();
void/Object onActivate(params);

pageLoaded事件会在一个page class在被创建时创建调用。
pageAttached会在page class被创建时和每次tapestry request一个页面时调用。
pageDetached会在每次page class放回页面池时调用。 注意:最好不要有这个方法在页面,如果存在的话tapestry不会自动reset page class中的instance变量。

onActivate 会在页面render前的时候调用。
onActivate(params);这个也是会在页面render前的时候调用。只是这个接受page context变量(参数)。

促发的顺序是。

pageLoaded
pageAttached
onActivate
onActivate(params)
pageDetached

不过pageLoaded不一定在每次render page时都会触发。 因为它只在被创建时调用。

这里的话估计很多人都会问 pageAttached  onActivate 有什么区别。 我这里说说在开发时遇到的奇怪问题。

比如我们有两个页面 Index, Second. 如果在Index页面中有个PageLink组件page是Second。 这样当我打开Index页面时, Second的pageAttached方法也被调用了。 本来我的判断用户是否登入是在BasePage的pageAttached方法里面的,Index不需要登入, Second需要登入。 这样的话会调用Second的pageAttached这样就使页面转到Login page了。

我们应该把判断用户是否登入逻辑放到onActivate方法中, 这样当打开Index页面时,不会调用到Second的onActivate方法。

知道上面的情况,我们就应该把page class 变量初始化代码放在onActivate中而不是放到pageAttached方法里。

 

 

在项目中使用onActivate做权限控制,到后来发现很多问题。 有时候页面需要有参数的onActivate方面, 会搞得非常麻烦。 在看过http://www.nabble.com/T5-onActivate-td17673637.html#a17673637 和tapestry5 jumpstart http://202.177.217.122:8080/jumpstart/examples/lang/methods 发现。

onActivate不适合用来做权限控制和页面开始render的初始化值。 页面初始化值应该在setupRender里。

引用tapestry maillist中的别人说的一句话

 

写道
I just read the tail end of the conversation, but I wanted to add something.

I try to use onActivate to capture parameters from the url, and maybe do minimal translation/validation of those inputs. But I do the actual work within the setupRender. That way it doesn't matter how many onActivates get called and what order, they are only there to translate url parmaters into page variables which then drive setupRender ( with proper if not nulls, etc ).

This might simplify your mental model of how the code is split up and is supposed to work.


You would have to put some thought though if you use a form on a page, since the setupRender is not called on form submit.. If you look at the different events that the form lifecycle provides, you'll see that you just have to refactor your setupRender logic into a third method that is called from setupRender and an approriate onEvent from the form ( onPrepareForForm, or onPrepareSubmitForForm, something like that ).

 这里有片文章提供简便的方法实现权限控制: http://wiki.apache.org/tapestry/Tapestry5HowToControlAccess

 

分享到:
评论
3 楼 muinjava 2008-12-19  
没错, 成对使用的onPassivate ( ) and onActivate ( xx )是T5的一大突破, 它的目的之一就是便于用browser的收藏夹工具来收藏. 这个工作以前在T4中是implements IExternalPage来实现的. 而且现在的url路径跟干净更可读了.
2 楼 dengyin2000 2008-10-08  
在项目中使用onActivate做权限控制,到后来发现很多问题。 有时候页面需要有参数的onActivate方面, 会搞得非常麻烦。 在看过http://www.nabble.com/T5-onActivate-td17673637.html#a17673637和tapestry5 jumpstart http://202.177.217.122:8080/jumpstart/examples/lang/methods发现。

onActivate不适合用来做权限控制和页面开始render的初始化值。

引用tapestry maillist中的别人说的一句话

引用
I just read the tail end of the conversation, but I wanted to add something.

I try to use onActivate to capture parameters from the url, and maybe do minimal translation/validation of those inputs.  But I do the actual work within the setupRender.  That way it doesn't matter how many onActivates get called and what order, they are only there to translate url parmaters into page variables which then drive setupRender ( with proper if not nulls, etc ).

This might simplify your mental model of how the code is split up and is supposed to work.


You would have to put some thought though if you use a form on a page, since the setupRender is not called on form submit.. If you look at the different events that the form lifecycle provides, you'll see that you just have to refactor your setupRender logic into a third method that is called from setupRender and an approriate onEvent from the form ( onPrepareForForm, or onPrepareSubmitForForm, something like that ).



看了这段话 豁然开朗。责任应该分开 onActivate用来获取url中的context的值。而初始化数据应该放在setupRender中。 在tapestry5 jump start也是这样的。
1 楼 dengyin2000 2008-09-13  
另外在page中也可以使用component的lifecycle method
setupRender

cleanupRender

在setupRender可以初始化变量的值。 这个方法在onActivate之后调用。

cleanRendere可以处理一些资源的释放。

相关推荐

    viewModel,liveData,lifecycle的简单使用demo

    在这个"viewModel,liveData,lifecycle的简单使用demo"中,我们将深入探讨这三个概念以及它们如何协同工作。 首先,`ViewModel` 是一个设计用于保存数据并跨页面生存的对象,即使在设备旋转或应用重新启动等配置更改...

    20210826-dell 14G服务器使用Lifecycle安装windows server .pdf

    DELL 14G服务器通过F10 Lifecycle Controller安装Windows Server是服务器管理中常见的操作,这一过程涉及到服务器的初始化配置、RAID设置以及操作系统安装。本文档提供了详细步骤,适用于2021年8月26日的最新更新。 ...

    flutter plugin-android-lifecycle

    Flutter的flutter_plugin_android_lifecycle插件是一个Flutter插件,用于访问Android Lifecycle objects。它可以帮助其他Flutter插件在Android上更好地集成。 要使用flutter_plugin_android_lifecycle插件,需要将...

    Dell Lifecycle Controller 设置 Dell PowerEdge 服务器

    Dell Lifecycle Controller 是一种先进的嵌入式系统管理技术 , 借助这种技术 , 可以通过 integrated Dell Remote Access Controller (iDRAC) 来实现远程服务器管理。在使用 Lifecycle Controller 的情况下 ...

    androidx-lifecycle-common-2.1.0.jar

    androidx-lifecycle-common-2.1.0.jar

    androidx-lifecycle-livedata-2.0.0.aar

    androidx-lifecycle-livedata-2.0.0.aar

    Android框架组件Lifecycle的使用详解

    Android框架组件Lifecycle的使用详解 Android框架组件Lifecycle是Google推出的一系列框架组件之一,主要用于感知Activity和Fragment的生命周期。Lifecycle组件能够解决生命周期方法变臃肿的问题,使代码更加优雅。 ...

    Servlet_LifeCycle_Demo

    在这个示例中,我们将探讨Servlet如何启动、初始化、处理请求、服务多个请求、以及最终销毁。 首先,Servlet的生命周期分为四个主要阶段:加载和实例化、初始化、服务请求、以及销毁。 1. **加载和实例化**:当...

    vRealize Suite Lifecycle Manager技术白皮书.pdf

    vRealize Suite Lifecycle Manager技术白皮书.pdf vRealize Suite Lifecycle Manager是一个旨在简化vRealize产品组合的整个产品生命周期内的部署和日常管理的解决方案。它可以加快产品安装和部署速度、简化日常管理...

    Android官方activity-lifecycle生命周期例子

    Android官方activity-lifecycle生命周期例子,参考网页: http://developer.android.com/training/basics/activity-lifecycle/index.html 方便了解Activity生命周期,提供了非常形象的说明。生动讲解。可以结合官网...

    androidx-lifecycle-livedata-core-2.0.0.aar

    androidx-lifecycle-livedata-core-2.0.0.aar

    Android中的生命周期LifeCycle

    在Android应用开发中,了解和掌握Activity的生命周期是至关重要的,因为这直接影响到应用程序的性能、内存管理和用户体验。...通过学习源码、使用相关工具,并结合最佳实践,开发者可以构建出用户体验更佳的应用。

    Lifecycle-Sorter,.zip

    3. **示例**:如果存在示例代码或应用,它们将展示如何在实际项目中使用Lifecycle-Sorter。这对于新用户理解和集成该工具非常有帮助。 4. **文档**:项目文档可能包括README文件,提供项目概述、安装指南、使用示例...

    Dell_Lifecycle_Controller_Integration_3.0.0

    Dell_Lifecycle_Controller_Integration_3.0.0 用于更新dell 11g 网络服务器的lifecycle controller integration

    Product Lifecycle Management资料

    **产品生命周期管理**(Product Lifecycle Management,简称PLM),是一种集成化的信息系统,旨在帮助制造型企业全面管理和优化从产品概念设计到报废回收整个生命周期中的所有数据、信息和流程。它不仅仅是对产品的...

    Agile Product Lifecycle Management AdministratGuide

    根据给定的文件信息,我们可以深入探讨“Agile Product Lifecycle Management(PLM)”这一主题。Agile PLM是一种先进的产品生命周期管理解决方案,由Oracle公司提供,旨在帮助企业更有效地管理和优化从产品概念到...

    androidx-lifecycle-viewmodel-2.3.0.aar

    androidx lifecycle 2.3.0 资源包

    浅谈Android的Lifecycle源码分析

    很早就听说了Google的Lifecycle组件,因为项目没有使用过,所以并没有过多的接触。不过最近看到了一篇文章,其中的一条评论提到了LiveData。恰巧这两天工作内容不多,所以赶紧研究一波! 不过在看LiveData之前,我...

    Lifecycle源码原理解析

    在Android开发中,Jetpack库是Google推荐的重要组件之一,其中Lifecycle组件对于管理Activity和Fragment的生命周期至关重要。本文将深入探讨Lifecycle源码的原理和实现机制,帮助开发者更好地理解和运用这个强大的...

    iDRAC-with-Lifecycle-Controller_Firmware_40T1C_WN32_2.63.60.61_A00.zip

    Lifecycle Controller则是iDRAC的一项增强特性,它允许在操作系统启动之前执行诸如安装、升级、配置等生命周期管理任务,无需额外的操作系统支持。 此压缩包文件"iDRAC-with-Lifecycle-Controller_Firmware_40T1C_...

Global site tag (gtag.js) - Google Analytics