Eld*_*ael 2 java spring spring-mvc thymeleaf
我正在阅读Thymeleaf + Spring 3 Tutorial并尝试构建模块化应用程序.我的目标是能够从类路径中的Jars加载百万富翁模板.
为此我SpringTemplateEngine在下一个xml中配置了一个:
<bean id="templateEngine" class="org.thymeleaf.spring3.SpringTemplateEngine">
<property name="templateResolvers">
<util:set>
<ref bean="servletContextTemplateResolver" />
<ref bean="classpathPluginTemplateResolver" />
</util:set>
</property>
</bean>
<bean id="classpathPluginTemplateResolver"
class="org.mael.codex.arcana.web.thymeleaf.templates.ClasspathPluginTemplateResolver">
<property name="prefix" value="/META-INF/codexarcana/plugin/views" />
<property name="suffix" value=".html" />
<property name="templateMode" value="HTML5" />
</bean>
Run Code Online (Sandbox Code Playgroud)
和ClasspathPluginTemplateResolver代码:
public class ClasspathPluginTemplateResolver extends TemplateResolver {
public ClasspathPluginTemplateResolver() {
super();
super.setResourceResolver(new ClasspathTemplateResolver());
}
@Override
public void setResourceResolver(IResourceResolver resourceResolver) {
throw new ConfigurationException("Cannot set a resource resolver on "
+ this.getClass().getName() + ". If "
+ "you want to set your own resource resolver, use "
+ TemplateResolver.class.getName() + "instead");
}
}
Run Code Online (Sandbox Code Playgroud)
和ClasspathTemplateResolver:
public class ClasspathTemplateResolver implements IResourceResolver {
@Override
public String getName() {
return this.getClass().getSimpleName();
}
@Override
public InputStream getResourceAsStream(
TemplateProcessingParameters templateProcessingParameters,
String resourceName) {
if (resourceName == null || resourceName.isEmpty()) {
throw new IllegalArgumentException("Resource name cannot be null");
}
try {
return new ClassPathResource(resourceName).getInputStream();
} catch (IOException e) {
throw new RuntimeException("Cannot open resource '" + resourceName
+ "'", e);
}
}
Run Code Online (Sandbox Code Playgroud)
}
如何避免ClasspathPluginTemplateResolver解析的模板中的名称冲突?
例:
假设我有2个具有此目录结构的插件:
codexarcana-poll-plugin.jar
----/META-INF/codexarcana/plugin/views/wizard.html
Run Code Online (Sandbox Code Playgroud)
和
codexarcana-gravatar-plugin.jar
----/META-INF/codexarcana/plugin/views/wizard.html
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我相信ClasspathTemplateResolver将返回错误的视图或将解决此类事件的冲突.
ITemplateResolver扩展基org.thymeleaf.templateresolver.AbstractTemplateResolver类的接口的实现(与所有开箱即用的实现一样)具有一个resolvablePatterns属性,允许您指定一系列模式,这些模式将用于确定哪些视图将被该特定模板视为可解析发动机.这应该可以帮助您避免碰撞.
在那里,你可以指定通配符模式,比如admin/*,user/*/create等等.
请记住,这些模式适用于视图名称,而不适用于模板文件名本身.例如,如果你的模板/WEB-INF/templates/index.html和你的视图解析器加上前缀/WEB-INF/templates/和后缀.html,您的视图名称为index,所以一个分辨的图案像*.html永远不会匹配.
此外,还有一个order属性可以确定要求模板解析器解析视图的顺序.
免责声明,根据StackOverflow规则的要求:我是Thymeleaf的作者.
| 归档时间: |
|
| 查看次数: |
6792 次 |
| 最近记录: |