Monday, August 11, 2008

Tapestry5 ComponentSource/ComponentResourcesCommon/ComponentResources/ComponentClassResolver Relationship

当知道某个组件的完整的id或者是页面的名字,就可以用ComponentSource接口的getComponent(String completeId)和getPage(String pageName)方法来获取相应的组件。
如组件名为Layout,页面为Start,则组件的completeId是Start:Layout,用getComponent("Start:Layout")来获得此Layout对象。getPage("Start")获取start页面。
其中的二个参数pageName和completeId,则可以能过ComponentResources接口提供的方法来获取,getPage()方法可以获取包含此组件的页面Page对象,ComponentResources从ComponentResourcesCommon接口继承到的方法getCompleteId()方法则可以获取mypage:foo.bar.baz形式的完整的id。另外ComponentResources接口中有很多方法比较有用,如getContainer()方法可以获取是哪个组件包含了此组件,还有createActionLink/createPageLink/getAnnotationProvider/getMessages等获取页面资源的方法。
对于获取到的pageName,可以利用ComponentClassResolver接口中提供的isPageName()方法来检查是否为pageName,另此接口也提供了另外几个操作page相关的几个方法,如resolvePageNameToClassName、resolvePageClassNameToPageName、canonicalizePageName、resolveComponentTypeToClassName等。

No comments :