JHacks
[ start | index | login or register ]
topics > tiles

tiles

Created by kocka. Last edited by kocka, one year and 56 days ago. Viewed 411 times. #6
[diff] [history] [edit] [rdf]
labels
attachments

Tiles

>>http://tiles.apache.org/

Egy szerver oldali UI komponens rendszer. Na, szóval amit a tapestry komponensnek nevez, az itt tile.

Történet

A tiles a struts 1-el indult, majd a struts 2 már nélküle jött ki, és külön topp level apache projectet kapott a cucc.

Struts tiles

Valahogy ennyi az egesz: egy xmlben definialod hogy milyen darabokbol all a view, es ezekhez rendelsz jsp-ket. Ez hierarchikusan is megy, azaz pl definialsz egy alap komponenst ami a headert meg a footert deklaralja, es a tobbi leszarmaztatott meg tudja hogy mi a content.

A view darabokhoz definialhatsz egy controllert is, ez egy koddarab ami lefut mielott a jsp megkapna a vezerlest, es pl betoltheti a szukseges adatokat. a ami viszont faj: A jspben kell meghatarozni hogy melyik az az osztaly, nem deklaracios xmlben.

Meg persze tartoznak hozza jsp tagek, amivel lehet include-olni. Vegulis ennyivel ubereli a jsp include csodajat. Amivel alulmulja az az hogy a beinclude-olt jsp-bol mar ugyanigy tiles-szal nem lehet masikat betolteni, szoval igy nem hierarchikus.

Szoval egy alapvetoen jo otlet, csak sok vele a szopas :(

Had tegyem kozze gonosz osztalyomat amivel spring contextben regisztralhatod a controller beanjeidet, igy nem kell a springes applicationcontext-bol bogarasznod ki a szukseges ban-eket, hanem hasznalhatod a setter vagy konstruktor alapu dependency injectiont.

import javax.servlet.ServletContext;
import javax.servlet.ServletRequest;

import org.apache.log4j.Logger; import org.apache.struts.tiles.ComponentDefinition; import org.apache.struts.tiles.Controller; import org.apache.struts.tiles.DefinitionsFactoryException; import org.apache.struts.tiles.NoSuchDefinitionException; import org.apache.struts.tiles.xmlDefinition.I18nFactorySet; import org.springframework.context.ApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils;

/** * This is a hack around the tiles architecture, so that one can register controller beans in spring. * * @author kocka */ public class SpringDefinitionsFactory extends I18nFactorySet {

Logger logger = Logger.getLogger(SpringDefinitionsFactory.class);

/* (non-Javadoc) * @see org.apache.struts.tiles.DefinitionsFactory#getDefinition(java.lang.String, javax.servlet.ServletRequest, javax.servlet.ServletContext) */ public ComponentDefinition getDefinition(String name, ServletRequest request, ServletContext servletContext) throws NoSuchDefinitionException, DefinitionsFactoryException { if(logger.isDebugEnabled()) logger.debug("requested definition of "+name);

ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(servletContext); ComponentDefinition def = super.getDefinition(name, request, servletContext); if(def != null){ String controller = def.getController(); Controller controllerInstance = def.getControllerInstance(); if(controllerInstance == null && controller != null){ controllerInstance = (Controller) context.getBean(controller); def.setControllerInstance(controllerInstance); } } return def; }

}

Apache Tiles

Top level project, elvileg független a strutstól

no comments | post comment
snipsnap.org | Copyright 2000-2002 Matthias L. Jugel and Stephan J. Schmidt