Use URLs for groovy template resources

This commit is contained in:
Dave Syer 2014-05-16 13:03:50 +01:00
parent e471759be8
commit c8ca2495de
2 changed files with 10 additions and 18 deletions

View File

@ -36,6 +36,7 @@ import org.springframework.boot.autoconfigure.groovy.template.web.GroovyTemplate
import org.springframework.boot.autoconfigure.groovy.template.web.LocaleAwareTemplate; import org.springframework.boot.autoconfigure.groovy.template.web.LocaleAwareTemplate;
import org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration; import org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration;
import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.context.i18n.LocaleContextHolder;
@ -70,7 +71,7 @@ public class GroovyTemplateAutoConfiguration {
public static class GroovyWebConfiguration implements BeanClassLoaderAware { public static class GroovyWebConfiguration implements BeanClassLoaderAware {
@Autowired @Autowired
private final ResourceLoader resourceLoader = new DefaultResourceLoader(); private ApplicationContext resourceLoader;
@Autowired @Autowired
private GroovyTemplateProperties properties; private GroovyTemplateProperties properties;
@ -95,11 +96,14 @@ public class GroovyTemplateAutoConfiguration {
} }
private ClassLoader createParentLoaderForTemplates() throws Exception { private ClassLoader createParentLoaderForTemplates() throws Exception {
Resource resource = this.resourceLoader.getResource(this.properties Resource[] resources = this.resourceLoader.getResources(this.properties
.getPrefix()); .getPrefix());
if (resource.exists()) { if (resources.length > 0) {
return new URLClassLoader(new URL[] { resource.getURL() }, URL[] urls = new URL[resources.length];
this.classLoader); for (int i = 0; i < resources.length; i++) {
urls[i] = resources[i].getURL();
}
return new URLClassLoader(urls, this.classLoader);
} }
else { else {
return this.classLoader; return this.classLoader;
@ -114,7 +118,6 @@ public class GroovyTemplateAutoConfiguration {
resolver.setSuffix(this.properties.getSuffix()); resolver.setSuffix(this.properties.getSuffix());
resolver.setCache(this.properties.isCache()); resolver.setCache(this.properties.isCache());
resolver.setContentType(this.properties.getContentType()); resolver.setContentType(this.properties.getContentType());
resolver.setCharSet(this.properties.getCharSet());
resolver.setViewNames(this.properties.getViewNames()); resolver.setViewNames(this.properties.getViewNames());
resolver.setTemplateEngine(engine); resolver.setTemplateEngine(engine);

View File

@ -20,7 +20,6 @@ import groovy.text.SimpleTemplateEngine;
import groovy.text.Template; import groovy.text.Template;
import groovy.text.TemplateEngine; import groovy.text.TemplateEngine;
import java.io.InputStreamReader;
import java.util.Locale; import java.util.Locale;
import org.springframework.beans.propertyeditors.LocaleEditor; import org.springframework.beans.propertyeditors.LocaleEditor;
@ -36,8 +35,6 @@ public class GroovyTemplateViewResolver extends UrlBasedViewResolver {
private TemplateEngine engine = new SimpleTemplateEngine(); private TemplateEngine engine = new SimpleTemplateEngine();
private String charSet = "UTF-8";
public GroovyTemplateViewResolver() { public GroovyTemplateViewResolver() {
setViewClass(GroovyTemplateView.class); setViewClass(GroovyTemplateView.class);
} }
@ -49,21 +46,13 @@ public class GroovyTemplateViewResolver extends UrlBasedViewResolver {
this.engine = engine; this.engine = engine;
} }
/**
* @param charSet the charSet to set
*/
public void setCharSet(String charSet) {
this.charSet = charSet;
}
@Override @Override
protected View loadView(String viewName, Locale locale) throws Exception { protected View loadView(String viewName, Locale locale) throws Exception {
Resource resource = resolveResource(viewName, locale); Resource resource = resolveResource(viewName, locale);
if (resource == null) { if (resource == null) {
return null; return null;
} }
Template template = this.engine.createTemplate(new InputStreamReader(resource Template template = this.engine.createTemplate(resource.getURL());
.getInputStream(), this.charSet));
GroovyTemplateView view = new GroovyTemplateView(template); GroovyTemplateView view = new GroovyTemplateView(template);
view.setApplicationContext(getApplicationContext()); view.setApplicationContext(getApplicationContext());
view.setServletContext(getServletContext()); view.setServletContext(getServletContext());