|
|
|
@ -1,5 +1,5 @@ |
|
|
|
/* |
|
|
|
/* |
|
|
|
* Copyright 2002-2012 the original author or authors. |
|
|
|
* Copyright 2002-2014 the original author or authors. |
|
|
|
* |
|
|
|
* |
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
|
|
* you may not use this file except in compliance with the License. |
|
|
|
* you may not use this file except in compliance with the License. |
|
|
|
@ -26,25 +26,24 @@ import org.springframework.web.servlet.View; |
|
|
|
import org.springframework.web.servlet.ViewResolver; |
|
|
|
import org.springframework.web.servlet.ViewResolver; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* Simple implementation of ViewResolver that interprets a view name |
|
|
|
* A simple implementation of {@link org.springframework.web.servlet.ViewResolver} |
|
|
|
* as bean name in the current application context, i.e. in the XML |
|
|
|
* that interprets a view name as a bean name in the current application context, |
|
|
|
* file of the executing DispatcherServlet. |
|
|
|
* i.e. typically in the XML file of the executing {@code DispatcherServlet}. |
|
|
|
* |
|
|
|
* |
|
|
|
* <p>This resolver can be handy for small applications, keeping all |
|
|
|
* <p>This resolver can be handy for small applications, keeping all definitions |
|
|
|
* definitions ranging from controllers to views in the same place. |
|
|
|
* ranging from controllers to views in the same place. For larger applications, |
|
|
|
* For normal applications, XmlViewResolver will be the better choice, as |
|
|
|
* {@link XmlViewResolver} will be the better choice, as it separates the XML |
|
|
|
* it separates the XML view bean definitions into a dedicated views file. |
|
|
|
* view bean definitions into a dedicated views file. |
|
|
|
* View beans should virtually never have references to any other |
|
|
|
|
|
|
|
* application beans - such a separation will make this clear. |
|
|
|
|
|
|
|
* |
|
|
|
* |
|
|
|
* <p>This ViewResolver does not support internationalization. |
|
|
|
* <p>Note: Neither this {@code ViewResolver} nor {@link XmlViewResolver} supports |
|
|
|
* Consider ResourceBundleViewResolver if you need to apply different |
|
|
|
* internationalization. Consider {@link ResourceBundleViewResolver} if you need |
|
|
|
* view resources per locale. |
|
|
|
* to apply different view resources per locale. |
|
|
|
* |
|
|
|
* |
|
|
|
* <p>Note: This ViewResolver implements the Ordered interface to allow for |
|
|
|
* <p>Note: This {@code ViewResolver} implements the {@link Ordered} interface
|
|
|
|
* flexible participation in ViewResolver chaining. For example, some special |
|
|
|
* in order to allow for flexible participation in {@code ViewResolver} chaining. |
|
|
|
* views could be defined via this ViewResolver (giving it 0 as "order" value), |
|
|
|
* For example, some special views could be defined via this {@code ViewResolver} |
|
|
|
* while all remaining views could be resolved by a UrlBasedViewResolver. |
|
|
|
* (giving it 0 as "order" value), while all remaining views could be resolved by |
|
|
|
|
|
|
|
* a {@link UrlBasedViewResolver}. |
|
|
|
* |
|
|
|
* |
|
|
|
* @author Juergen Hoeller |
|
|
|
* @author Juergen Hoeller |
|
|
|
* @since 18.06.2003 |
|
|
|
* @since 18.06.2003 |
|
|
|
@ -63,7 +62,7 @@ public class BeanNameViewResolver extends WebApplicationObjectSupport implements |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public int getOrder() { |
|
|
|
public int getOrder() { |
|
|
|
return order; |
|
|
|
return this.order; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -71,7 +70,19 @@ public class BeanNameViewResolver extends WebApplicationObjectSupport implements |
|
|
|
public View resolveViewName(String viewName, Locale locale) throws BeansException { |
|
|
|
public View resolveViewName(String viewName, Locale locale) throws BeansException { |
|
|
|
ApplicationContext context = getApplicationContext(); |
|
|
|
ApplicationContext context = getApplicationContext(); |
|
|
|
if (!context.containsBean(viewName)) { |
|
|
|
if (!context.containsBean(viewName)) { |
|
|
|
// Allow for ViewResolver chaining.
|
|
|
|
if (logger.isDebugEnabled()) { |
|
|
|
|
|
|
|
logger.debug("No matching bean found for view name '" + viewName + "'"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
// Allow for ViewResolver chaining...
|
|
|
|
|
|
|
|
return null; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (!context.isTypeMatch(viewName, View.class)) { |
|
|
|
|
|
|
|
if (logger.isDebugEnabled()) { |
|
|
|
|
|
|
|
logger.debug("Found matching bean for view name '" + viewName + |
|
|
|
|
|
|
|
"' - to be ignored since it does not implement View"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
// Since we're looking into the general ApplicationContext here,
|
|
|
|
|
|
|
|
// let's accept this as a non-match and allow for chaining as well...
|
|
|
|
return null; |
|
|
|
return null; |
|
|
|
} |
|
|
|
} |
|
|
|
return context.getBean(viewName, View.class); |
|
|
|
return context.getBean(viewName, View.class); |
|
|
|
|