TilesConfigurer
class from Spring. Here is a snippet of for my configuration. Now, this means that web.xml no longer needs the Tiles2 listener but simply let Spring's Servlet configuration do the initializing for you. If you are using Spring MVC, this is already done, if you are not, you may need to use
RequestContextListener
or the ContextLoaderListener
so that this tilesConfigurer
bean is placed in application scope similar to what the Tiles2 configurer does out of the box.Warning: leaving the Tiles2 listener (along with the configuration above) will still try to load the tiles.xml from the default location (WEB-INF folder) so you may be overriding the work already done by Spring's
SpringBeanPreparerFactory
. Take a look at the generated logs for further detail. Once you have this, now you have control (in Spring) over Tiles2. I wanted to add a custom TilesDefinitionsFactory
so I created my own as follows:package myPackage.MyTileDefinitionsFactory; public class MyTileDefinitionsFactory extends UrlDefinitionsFactory { public Definition getDefinition(String name, TilesRequestContext ctx) throws DefinitionsFactoryException { Definition tileDefinition = super.getDefinition(name, ctx); // add you own logic to modify/update template and/or tile return tileDefinition; } }With this new factory, now we were able to introduce custom menus, tabs, and other widgets to screens based on roles and/or other business ruls (e.g. workflows). Furthermore, we were even able to change the backing template (eventhough the Tiles2 documentation says you can not change the template of a tile dynamically, this did the trick). There are many other possibilities opened with this approach that I'm sure some will find useful.
One more thing to keep in mind, you need to setup the property useMutableTilesContainer to true so as to be able to great dynamic tiles. As you read the Tiles API, you can potentially create your own tiles dynamically as well as simply modify existing ones. I found this approach to be a very powerful one when integrating Tiles2 with Struts2.
Hope this helps!
No comments:
Post a Comment