Add order attribute to MVC ViewResolver config
The ViewResolverComposite that contains the ViewResolver's registered throug the MVC Java config and namespace can now be assigned an explicit order.
This commit is contained in:
@@ -133,7 +133,6 @@ public class ViewResolversBeanDefinitionParser implements BeanDefinitionParser {
|
||||
beanDef.getPropertyValues().add("viewResolvers", resolvers);
|
||||
ManagedList<Object> list = new ManagedList<Object>(1);
|
||||
list.add(beanDef);
|
||||
|
||||
compositeResolverBeanDef.getPropertyValues().add("order", Ordered.HIGHEST_PRECEDENCE);
|
||||
compositeResolverBeanDef.getPropertyValues().add("viewResolvers", list);
|
||||
}
|
||||
@@ -141,6 +140,10 @@ public class ViewResolversBeanDefinitionParser implements BeanDefinitionParser {
|
||||
throw new IllegalArgumentException("Only one <content-negotiation> element is allowed.");
|
||||
}
|
||||
|
||||
if (element.hasAttribute("order")) {
|
||||
compositeResolverBeanDef.getPropertyValues().add("order", element.getAttribute("order"));
|
||||
}
|
||||
|
||||
context.getReaderContext().getRegistry().registerBeanDefinition(beanName, compositeResolverBeanDef);
|
||||
context.registerComponent(new BeanComponentDefinition(compositeResolverBeanDef, beanName));
|
||||
context.popAndRegisterContainingComponent();
|
||||
|
||||
@@ -57,7 +57,7 @@ public class ViewResolverRegistry {
|
||||
|
||||
private final List<ViewResolver> viewResolvers = new ArrayList<ViewResolver>(4);
|
||||
|
||||
private int order = Ordered.LOWEST_PRECEDENCE;
|
||||
private Integer order;
|
||||
|
||||
private ContentNegotiationManager contentNegotiationManager;
|
||||
|
||||
@@ -112,7 +112,7 @@ public class ViewResolverRegistry {
|
||||
private void initContentNegotiatingViewResolver(View[] defaultViews) {
|
||||
|
||||
// ContentNegotiatingResolver in the registry: elevate its precedence!
|
||||
this.order = Ordered.HIGHEST_PRECEDENCE;
|
||||
this.order = (this.order == null ? Ordered.HIGHEST_PRECEDENCE : this.order);
|
||||
|
||||
if (this.contentNegotiatingResolver != null) {
|
||||
if (!ObjectUtils.isEmpty(defaultViews)) {
|
||||
@@ -257,6 +257,22 @@ public class ViewResolverRegistry {
|
||||
this.viewResolvers.add(viewResolver);
|
||||
}
|
||||
|
||||
/**
|
||||
* ViewResolver's registered through this registry are encapsulated in an
|
||||
* instance of {@link org.springframework.web.servlet.view.ViewResolverComposite
|
||||
* ViewResolverComposite} and follow the order of registration.
|
||||
* This property determines the order of the ViewResolverComposite itself
|
||||
* relative to any additional ViewResolver's (not registered here) present in
|
||||
* the Spring configuration
|
||||
* <p>By default this property is not set, which means the resolver is ordered
|
||||
* at {@link Ordered#LOWEST_PRECEDENCE} unless content negotiation is enabled
|
||||
* in which case the order (if not set explicitly) is changed to
|
||||
* {@link Ordered#HIGHEST_PRECEDENCE}.
|
||||
*/
|
||||
public void order(int order) {
|
||||
this.order = order;
|
||||
}
|
||||
|
||||
protected boolean hasBeanOfType(Class<?> beanType) {
|
||||
return !ObjectUtils.isEmpty(BeanFactoryUtils.beanNamesForTypeIncludingAncestors(
|
||||
this.applicationContext, beanType, false, false));
|
||||
|
||||
Reference in New Issue
Block a user