Browse Source
<mvc:view-resolution /> now allows to configure easily view resolvers. Issue: SPR-7093pull/589/merge
6 changed files with 260 additions and 1 deletions
@ -0,0 +1,158 @@
@@ -0,0 +1,158 @@
|
||||
package org.springframework.web.servlet.config; |
||||
|
||||
import java.util.HashMap; |
||||
import java.util.List; |
||||
import java.util.Map; |
||||
|
||||
import org.springframework.beans.factory.config.BeanDefinition; |
||||
import org.springframework.beans.factory.parsing.BeanComponentDefinition; |
||||
import org.springframework.beans.factory.parsing.CompositeComponentDefinition; |
||||
import org.springframework.beans.factory.support.RootBeanDefinition; |
||||
import org.springframework.beans.factory.xml.BeanDefinitionParser; |
||||
import org.springframework.beans.factory.xml.ParserContext; |
||||
import org.springframework.util.xml.DomUtils; |
||||
import org.springframework.web.servlet.view.BeanNameViewResolver; |
||||
import org.springframework.web.servlet.view.InternalResourceViewResolver; |
||||
|
||||
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer; |
||||
import org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver; |
||||
import org.springframework.web.servlet.view.tiles2.TilesConfigurer; |
||||
import org.springframework.web.servlet.view.tiles2.TilesView; |
||||
import org.springframework.web.servlet.view.tiles2.TilesViewResolver; |
||||
import org.w3c.dom.Element; |
||||
|
||||
|
||||
public class ViewResolversBeanDefinitionParser implements BeanDefinitionParser { |
||||
|
||||
private static final String INTERNAL_VIEW_RESOLVER_BEAN_NAME = |
||||
"org.springframework.web.servlet.view.InternalResourceViewResolver"; |
||||
private static final String TILES2_VIEW_RESOLVER_BEAN_NAME = |
||||
"org.springframework.web.servlet.view.tiles2.TilesViewResolver"; |
||||
private static final String TILES2_CONFIGURER_BEAN_NAME = |
||||
"org.springframework.web.servlet.view.tiles2.TilesConfigurer"; |
||||
private static final String BEANNAME_VIEW_RESOLVER_BEAN_NAME = |
||||
"org.springframework.web.servlet.view.BeanNameViewResolver"; |
||||
private static final String FREEMARKER_CONFIGURER_BEAN_NAME = |
||||
"org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"; |
||||
private static final String FREEMARKER_VIEW_RESOLVER_BEAN_NAME = |
||||
"org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"; |
||||
|
||||
private ParserContext parserContext; |
||||
private Object source; |
||||
|
||||
public BeanDefinition parse(Element element, ParserContext parserContext) { |
||||
|
||||
this.parserContext=parserContext; |
||||
|
||||
source= parserContext.extractSource(element); |
||||
CompositeComponentDefinition compDefinition = new CompositeComponentDefinition(element.getTagName(),source); |
||||
parserContext.pushContainingComponent(compDefinition); |
||||
|
||||
|
||||
|
||||
List<Element> viewResolverElements = //DomUtils.getChildElements(element);
|
||||
DomUtils.getChildElementsByTagName(element, new String[] { "jsp", "tiles","bean-name","freemarker" }); |
||||
for (Element viewResolverElement : viewResolverElements) { |
||||
|
||||
if ("jsp".equals(viewResolverElement.getLocalName())) { |
||||
registerInternalResourceViewResolverBean(parserContext,viewResolverElement); |
||||
System.out.println("Registered Internalresource view resolver"); |
||||
} |
||||
|
||||
if("bean-name".equals(viewResolverElement.getLocalName())){ |
||||
registerBeanNameViewResolverBean(parserContext,viewResolverElement); |
||||
System.out.println("Registered BeanNameViewResolverBean view resolver"); |
||||
} |
||||
if ("tiles".equals(viewResolverElement.getLocalName())) { |
||||
registerTilesViewResolverBean(parserContext,viewResolverElement); |
||||
registerTilesConfigurerBean(parserContext,viewResolverElement); |
||||
} |
||||
if("freemarker".equals(viewResolverElement.getLocalName())){ |
||||
registerFreemarkerViewResolverBean(parserContext,viewResolverElement); |
||||
registerFreemarkerConfigurerBean(parserContext,viewResolverElement); |
||||
} |
||||
|
||||
} |
||||
|
||||
// MvcNamespaceUtils.registerDefaultComponents(parserContext, source);
|
||||
parserContext.popAndRegisterContainingComponent(); |
||||
return null; |
||||
|
||||
|
||||
} |
||||
|
||||
private void registerBean(String beanName,Map<String,Object> propertyMap,Class beanClass ){ |
||||
RootBeanDefinition beanDef = new RootBeanDefinition(beanClass); |
||||
beanDef.setSource(source); |
||||
beanDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); |
||||
|
||||
for(String propertyName:propertyMap.keySet()){ |
||||
beanDef.getPropertyValues().add(propertyName, propertyMap.get(propertyName)); |
||||
} |
||||
parserContext.getRegistry().registerBeanDefinition(beanName, beanDef); |
||||
parserContext.registerComponent(new BeanComponentDefinition(beanDef, beanName)); |
||||
|
||||
|
||||
} |
||||
|
||||
private void registerFreemarkerConfigurerBean(ParserContext parserContext, Element viewResolverElement) { |
||||
String templateLoaderPath=viewResolverElement.getAttribute("templateLoaderPath"); |
||||
Map<String, Object> propertyMap= new HashMap<String, Object>(); |
||||
propertyMap.put("templateLoaderPath", templateLoaderPath); |
||||
|
||||
registerBean(FREEMARKER_CONFIGURER_BEAN_NAME, propertyMap, FreeMarkerConfigurer.class); |
||||
|
||||
} |
||||
|
||||
private void registerFreemarkerViewResolverBean(ParserContext parserContext, Element viewResolverElement) { |
||||
if (!parserContext.getRegistry().containsBeanDefinition(FREEMARKER_VIEW_RESOLVER_BEAN_NAME)) { |
||||
|
||||
Map<String, Object> propertyMap= new HashMap<String, Object>(); |
||||
propertyMap.put("prefix", viewResolverElement.getAttribute("prefix")); |
||||
propertyMap.put("suffix", viewResolverElement.getAttribute("suffix")); |
||||
propertyMap.put("order", 4); |
||||
registerBean(FREEMARKER_VIEW_RESOLVER_BEAN_NAME, propertyMap, FreeMarkerViewResolver.class); |
||||
} |
||||
} |
||||
|
||||
private void registerBeanNameViewResolverBean(ParserContext parserContext, Element viewResolverElement) { |
||||
if (!parserContext.getRegistry().containsBeanDefinition(BEANNAME_VIEW_RESOLVER_BEAN_NAME)) { |
||||
Map<String, Object> propertyMap= new HashMap<String, Object>(); |
||||
propertyMap.put("order", 3); |
||||
registerBean(BEANNAME_VIEW_RESOLVER_BEAN_NAME, propertyMap, BeanNameViewResolver.class); |
||||
System.out.println("Registered BeanNameViewResolverBean view resolver"); |
||||
} |
||||
} |
||||
|
||||
private void registerTilesConfigurerBean(ParserContext parserContext,Element viewResolverElement) { |
||||
if (!parserContext.getRegistry().containsBeanDefinition(TILES2_CONFIGURER_BEAN_NAME)) { |
||||
Map<String, Object> propertyMap= new HashMap<String, Object>(); |
||||
propertyMap.put("definitions", viewResolverElement.getAttribute("definitions")); |
||||
registerBean(TILES2_CONFIGURER_BEAN_NAME, propertyMap, TilesConfigurer.class); |
||||
} |
||||
} |
||||
|
||||
private void registerTilesViewResolverBean(ParserContext parserContext, Element viewResolverElement) { |
||||
|
||||
if (!parserContext.getRegistry().containsBeanDefinition(TILES2_VIEW_RESOLVER_BEAN_NAME)) { |
||||
Map<String, Object> propertyMap= new HashMap<String, Object>(); |
||||
propertyMap.put("viewClass", TilesView.class); |
||||
propertyMap.put("order", 1); |
||||
registerBean(TILES2_VIEW_RESOLVER_BEAN_NAME, propertyMap, TilesViewResolver.class); |
||||
} |
||||
} |
||||
private void registerInternalResourceViewResolverBean(ParserContext parserContext, Element viewResolverElement) { |
||||
if (!parserContext.getRegistry().containsBeanDefinition(INTERNAL_VIEW_RESOLVER_BEAN_NAME)) { |
||||
Map<String, Object> propertyMap= new HashMap<String, Object>(); |
||||
propertyMap.put("prefix", viewResolverElement.getAttribute("prefix")); |
||||
propertyMap.put("suffix", viewResolverElement.getAttribute("suffix")); |
||||
propertyMap.put("order", 2); |
||||
registerBean(INTERNAL_VIEW_RESOLVER_BEAN_NAME, propertyMap, InternalResourceViewResolver.class); |
||||
} |
||||
|
||||
|
||||
} |
||||
|
||||
|
||||
|
||||
} |
||||
@ -0,0 +1,17 @@
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<beans xmlns="http://www.springframework.org/schema/beans" |
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
xmlns:mvc="http://www.springframework.org/schema/mvc" |
||||
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd |
||||
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> |
||||
|
||||
<mvc:view-resolvers> |
||||
<mvc:jsp prefix="/WEB-INF/" suffix=".jsp" /> |
||||
<mvc:bean-name /> |
||||
<mvc:tiles definitions="/tiles.xml" /> |
||||
|
||||
<mvc:freemarker prefix="" suffix=".ftl" templateLoaderPath="/WEB-INF/ftl/" /> |
||||
</mvc:view-resolvers> |
||||
|
||||
</beans> |
||||
|
||||
@ -0,0 +1,20 @@
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?> |
||||
<!DOCTYPE tiles-definitions PUBLIC |
||||
"-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN" |
||||
"http://tiles.apache.org/dtds/tiles-config_2_0.dtd"> |
||||
<tiles-definitions> |
||||
<definition name="base.definition" |
||||
template="/WEB-INF/jsp/layout.jsp"> |
||||
<put-attribute name="title" value="" /> |
||||
<put-attribute name="header" value="/WEB-INF/jsp/header.jsp" /> |
||||
<put-attribute name="menu" value="/WEB-INF/jsp/menu.jsp" /> |
||||
<put-attribute name="body" value="" /> |
||||
<put-attribute name="footer" value="/WEB-INF/jsp/footer.jsp" /> |
||||
</definition> |
||||
|
||||
<definition name="contact" extends="base.definition"> |
||||
<put-attribute name="title" value="Contact Manager" /> |
||||
<put-attribute name="body" value="/WEB-INF/jsp/contact.jsp" /> |
||||
</definition> |
||||
|
||||
</tiles-definitions> |
||||
Loading…
Reference in new issue