1818
1919import java .util .LinkedList ;
2020import java .util .List ;
21-
2221import javax .el .ArrayELResolver ;
2322import javax .el .BeanELResolver ;
2423import javax .el .CompositeELResolver ;
4948import org .apache .tiles .extras .complete .CompleteAutoloadTilesInitializer ;
5049import org .apache .tiles .factory .AbstractTilesContainerFactory ;
5150import org .apache .tiles .factory .BasicTilesContainerFactory ;
52- import org .apache .tiles .impl .BasicTilesContainer ;
5351import org .apache .tiles .impl .mgmt .CachingTilesContainer ;
5452import org .apache .tiles .locale .LocaleResolver ;
5553import org .apache .tiles .preparer .factory .PreparerFactory ;
5654import org .apache .tiles .request .ApplicationContext ;
55+ import org .apache .tiles .request .ApplicationContextAware ;
5756import org .apache .tiles .request .ApplicationResource ;
5857import org .apache .tiles .startup .DefaultTilesInitializer ;
5958import org .apache .tiles .startup .TilesInitializer ;
59+
6060import org .springframework .beans .BeanUtils ;
6161import org .springframework .beans .BeanWrapper ;
6262import org .springframework .beans .PropertyAccessorFactory ;
103103 * @author mick semb wever
104104 * @author Rossen Stoyanchev
105105 * @since 3.2
106+ * @see TilesView
107+ * @see TilesViewResolver
106108 */
107109public class TilesConfigurer implements ServletContextAware , InitializingBean , DisposableBean {
108110
109- private static final boolean tilesElPresent = // requires JSP 2.1 as well as Tiles EL module
110- ClassUtils .isPresent ("javax.servlet.jsp.JspApplicationContext" , TilesConfigurer .class .getClassLoader ()) &&
111+ private static final boolean tilesElPresent =
111112 ClassUtils .isPresent ("org.apache.tiles.el.ELAttributeEvaluator" , TilesConfigurer .class .getClassLoader ());
112113
114+
113115 protected final Log logger = LogFactory .getLog (getClass ());
114116
115117 private TilesInitializer tilesInitializer ;
@@ -128,8 +130,6 @@ public class TilesConfigurer implements ServletContextAware, InitializingBean, D
128130
129131 private ServletContext servletContext ;
130132
131- public TilesConfigurer () {
132- }
133133
134134 /**
135135 * Configure Tiles using a custom TilesInitializer, typically specified as an inner bean.
@@ -158,10 +158,11 @@ public void setCompleteAutoload(boolean completeAutoload) {
158158 try {
159159 this .tilesInitializer = new SpringCompleteAutoloadTilesInitializer ();
160160 }
161- catch (Exception ex ) {
162- throw new IllegalStateException ("tiles-extras 3.x not available" , ex );
161+ catch (Throwable ex ) {
162+ throw new IllegalStateException ("Tiles-Extras 3.0 not available" , ex );
163163 }
164- } else {
164+ }
165+ else {
165166 this .tilesInitializer = null ;
166167 }
167168 }
@@ -170,7 +171,7 @@ public void setCompleteAutoload(boolean completeAutoload) {
170171 * Set the Tiles definitions, i.e. the list of files containing the definitions.
171172 * Default is "/WEB-INF/tiles.xml".
172173 */
173- public void setDefinitions (String [] definitions ) {
174+ public void setDefinitions (String ... definitions ) {
174175 this .definitions = definitions ;
175176 }
176177
@@ -318,8 +319,8 @@ protected DefinitionsFactory createDefinitionsFactory(ApplicationContext applica
318319
319320 if (definitionsFactoryClass != null ) {
320321 DefinitionsFactory factory = BeanUtils .instantiate (definitionsFactoryClass );
321- if (factory instanceof org . apache . tiles . request . ApplicationContextAware ) {
322- ((org . apache . tiles . request . ApplicationContextAware ) factory ).setApplicationContext (applicationContext );
322+ if (factory instanceof ApplicationContextAware ) {
323+ ((ApplicationContextAware ) factory ).setApplicationContext (applicationContext );
323324 }
324325 BeanWrapper bw = PropertyAccessorFactory .forBeanPropertyAccess (factory );
325326 if (bw .isWritableProperty ("localeResolver" )) {
@@ -352,64 +353,49 @@ protected LocaleResolver createLocaleResolver(ApplicationContext context) {
352353 @ Override
353354 protected AttributeEvaluatorFactory createAttributeEvaluatorFactory (ApplicationContext context ,
354355 LocaleResolver resolver ) {
355- return new BasicAttributeEvaluatorFactory (createELEvaluator (context ));
356- }
357-
358- private AttributeEvaluator createELEvaluator (ApplicationContext context ) {
359- if (tilesElPresent ) {
360- AttributeEvaluator evaluator = new TilesElActivator ().createEvaluator ();
361- if (evaluator != null ) {
362- return evaluator ;
363- }
356+ AttributeEvaluator evaluator ;
357+ if (tilesElPresent && JspFactory .getDefaultFactory () != null ) {
358+ evaluator = new TilesElActivator ().createEvaluator ();
364359 }
365- return new DirectAttributeEvaluator ();
360+ else {
361+ evaluator = new DirectAttributeEvaluator ();
362+ }
363+ return new BasicAttributeEvaluatorFactory (evaluator );
366364 }
367365 }
368366
369- private class SpringCompleteAutoloadTilesInitializer extends CompleteAutoloadTilesInitializer {
367+
368+ private static class SpringCompleteAutoloadTilesInitializer extends CompleteAutoloadTilesInitializer {
370369
371370 @ Override
372371 protected AbstractTilesContainerFactory createContainerFactory (ApplicationContext context ) {
373372 return new SpringCompleteAutoloadTilesContainerFactory ();
374373 }
375374 }
376375
377- private class SpringCompleteAutoloadTilesContainerFactory extends CompleteAutoloadTilesContainerFactory {
376+
377+ private static class SpringCompleteAutoloadTilesContainerFactory extends CompleteAutoloadTilesContainerFactory {
378378
379379 @ Override
380- public TilesContainer createContainer (ApplicationContext applicationContext ) {
381- CachingTilesContainer cachingContainer = (CachingTilesContainer ) super .createContainer (applicationContext );
382- BasicTilesContainer tilesContainer = (BasicTilesContainer ) cachingContainer .getWrappedContainer ();
383- BeanWrapper bw = PropertyAccessorFactory .forBeanPropertyAccess (tilesContainer .getDefinitionsFactory ());
384- if (bw .isWritableProperty ("localeResolver" )) {
385- bw .setPropertyValue ("localeResolver" , new SpringLocaleResolver ());
386- }
387- return tilesContainer ;
380+ protected LocaleResolver createLocaleResolver (ApplicationContext applicationContext ) {
381+ return new SpringLocaleResolver ();
388382 }
383+
389384 }
390385
391386
392387 private class TilesElActivator {
393388
394389 public AttributeEvaluator createEvaluator () {
395- try {
396- // jsp-api-2.1 doesn't default instantiate a factory for us
397- JspFactory factory = JspFactory .getDefaultFactory ();
398- if ((factory != null ) && (factory .getJspApplicationContext (servletContext ).getExpressionFactory () != null )) {
399- logger .info ("Found JSP 2.1 ExpressionFactory" );
400- ELAttributeEvaluator evaluator = new ELAttributeEvaluator ();
401- evaluator .setExpressionFactory (factory .getJspApplicationContext (servletContext ).getExpressionFactory ());
402- evaluator .setResolver (new CompositeELResolverImpl ());
403- return evaluator ;
404- }
405- }
406- catch (Throwable ex ) {
407- logger .warn ("Could not obtain JSP 2.1 ExpressionFactory" , ex );
408- }
409- return null ;
390+ ELAttributeEvaluator evaluator = new ELAttributeEvaluator ();
391+ evaluator .setExpressionFactory (
392+ JspFactory .getDefaultFactory ().getJspApplicationContext (servletContext ).getExpressionFactory ());
393+ evaluator .setResolver (new CompositeELResolverImpl ());
394+ return evaluator ;
410395 }
411396 }
412397
398+
413399 private static class CompositeELResolverImpl extends CompositeELResolver {
414400
415401 public CompositeELResolverImpl () {
@@ -423,4 +409,5 @@ public CompositeELResolverImpl() {
423409 add (new BeanELResolver (false ));
424410 }
425411 }
412+
426413}
0 commit comments