
org.tinygroup.springmvc.view.TinyContentNegotiatingViewResolver Maven / Gradle / Ivy
The newest version!
package org.tinygroup.springmvc.view;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import javax.servlet.ServletContext;
import org.springframework.beans.factory.BeanFactoryUtils;
import org.springframework.core.OrderComparator;
import org.springframework.http.MediaType;
import org.springframework.web.context.support.WebApplicationObjectSupport;
import org.springframework.web.servlet.View;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.view.ContentNegotiatingViewResolver;
import org.tinygroup.assembly.AssemblyService;
import org.tinygroup.assembly.DefaultAssemblyService;
/**
* tiny模式的内容协商视图解析
*
* @author renhui
*
*/
public class TinyContentNegotiatingViewResolver extends
WebApplicationObjectSupport implements ViewResolver {
private ContentNegotiatingViewResolver contentNegotiatingViewResolver;
private Map mediaTypes = new ConcurrentHashMap();
private AssemblyService assemblyService = new DefaultAssemblyService();
public void setAssemblyService(AssemblyService assemblyService) {
this.assemblyService = assemblyService;
}
@Override
protected void initServletContext(ServletContext servletContext) {
List exclusions = new ArrayList();
exclusions.add(this.getApplicationContext().getBean(
TinyViewResolver.class));
try {
Map contentNegotiatingViewResolvers = BeanFactoryUtils
.beansOfTypeIncludingAncestors(
this.getApplicationContext(),
ContentNegotiatingViewResolver.class);
if (!contentNegotiatingViewResolvers.isEmpty()) {
exclusions.addAll(contentNegotiatingViewResolvers.values());
}
} catch (Exception e) {
}
exclusions.add(this);
assemblyService.setApplicationContext(getApplicationContext());
assemblyService.setExclusions(exclusions);
List viewResolvers = assemblyService
.findParticipants(ViewResolver.class);
OrderComparator.sort(viewResolvers);
contentNegotiatingViewResolver = new ContentNegotiatingViewResolver();
contentNegotiatingViewResolver
.setApplicationContext(getApplicationContext());
contentNegotiatingViewResolver
.setDefaultContentType(MediaType.TEXT_HTML);
try {
List defaultViews = new ArrayList();
Map defaultViewsStorages = BeanFactoryUtils
.beansOfTypeIncludingAncestors(
this.getApplicationContext(),
DefaultViewsStorage.class);
if (!defaultViewsStorages.isEmpty()) {
for (DefaultViewsStorage defaultViewsStorage : defaultViewsStorages
.values()) {
defaultViews.addAll(defaultViewsStorage.getDefaultViews());
}
}
contentNegotiatingViewResolver.setDefaultViews(defaultViews);
} catch (Exception e) {
}
contentNegotiatingViewResolver.setMediaTypes(mediaTypes);
try {
Map mappings = BeanFactoryUtils
.beansOfTypeIncludingAncestors(
this.getApplicationContext(),
MediaTypeMapping.class);
if (!mappings.isEmpty()) {
for (MediaTypeMapping mediaTypeMapping : mappings.values()) {
contentNegotiatingViewResolver
.setMediaTypes(mediaTypeMapping.getMediaTypes());
}
}
} catch (Exception e) {
}
contentNegotiatingViewResolver.setFavorParameter(true);
contentNegotiatingViewResolver.setFavorPathExtension(true);
contentNegotiatingViewResolver.setIgnoreAcceptHeader(false);
contentNegotiatingViewResolver.setServletContext(servletContext);
contentNegotiatingViewResolver.setUseJaf(true);
contentNegotiatingViewResolver.setUseNotAcceptableStatusCode(false);
contentNegotiatingViewResolver.setViewResolvers(viewResolvers);
}
public void setMediaTypes(Map mediaTypes) {
this.mediaTypes = mediaTypes;
}
public View resolveViewName(String viewName, Locale locale)
throws Exception {
return contentNegotiatingViewResolver.resolveViewName(viewName, locale);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy