Hi Folks,

We have a need to provide personalized page for different user groups, so I
tweaked some T5 services to make it possible to use personalized template
based on a request parameter. 

I would like put the general idea here in case you guys are interested. Also
since I have change some T5 internal services, I am wondering whether I have
missed something. Your advice are quite welcome.

Basically, I decorated 2 T5 internal services -- ComponentTemplateSource and
PagePool.
* ComponentTemplateSource is responsible to look up templates, so I have
changed it to request-aware and load template based on the user group.
* PagePool is responsible to pool pages, so I have changed it to
request-aware too and pool pages based on user group.

Although I used T5 decorator facility to intercept calls to both services,
it's not real decorating behavior as defined in GoF pattern. My decorators
will handle all calls, they won't even pass calls to decoratees -- the
original services. I am a little concerned whether my tweak would have some
side effects.

---------- Code Snippet of my AppModule.java
        public ComponentTemplateSource decorateComponentTemplateSource(
                        Class<ComponentTemplateSource> serviceInterface, Object 
delegate, String
serviceId, Logger logger,
                        TemplateParser parser, PageTemplateLocator locator, 
RequestGlobals
requestGlobals )
        {
                final MyComponentTemplateSourceImpl service = new
MyComponentTemplateSourceImpl(
                                parser, locator, requestGlobals );

                _updateListenerHub.addUpdateListener( service );

                return service;
        }

        public PagePool decoratePagePool( Class<PagePool> serviceInterface, 
Object
delegate, String serviceId,
                        Logger logger, PageLoader pageLoader, ThreadLocale 
threadLocale,
ComponentClassResolver resolver,
                        RequestGlobals requestGlobals, ThreadString 
threadString,
                        ComponentMessagesSource componentMessagesSource, 
ComponentTemplateSource
componentTemplateSource )
        {
                final MyPagePoolImpl service = new MyPagePoolImpl( logger, 
pageLoader,
threadLocale,
                                resolver, requestGlobals, threadString );

                // This covers invalidations due to changes to classes

                pageLoader.addInvalidationListener( service );

                // This covers invalidation due to changes to message catalogs 
(properties
files)

                componentMessagesSource.addInvalidationListener( service );

                // ... and this covers invalidations due to changes to templates

                componentTemplateSource.addInvalidationListener( service );

                return service;
        }
----------

Thanks for any advice.
Jeffrey Ai

-- 
View this message in context: 
http://www.nabble.com/T5%3A-Personalizing-page-and-component-template-tf4925841.html#a14098291
Sent from the Tapestry - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to