Thymeleaf - 如何添加自定义实用程序?
Posted
技术标签:
【中文标题】Thymeleaf - 如何添加自定义实用程序?【英文标题】:Thymeleaf - how to add a custom util? 【发布时间】:2016-10-20 16:56:00 【问题描述】:Thymeleaf 有许多有用的实用程序,例如 #strings.capitalize(...)
或 #lists.isEmpty(...)
。我正在尝试添加一个自定义的,但不知道如何注册。
制作了一个自定义的 Util 类:
public class LabelUtil
public String[] splitDoubleWord(String str)
return str.split("[A-Z]", 1);
现在我要这样使用它:
<span th:each="item : $#labels.splitDoubleWord(name)" th:text="$item"></span>
当然不行,因为我还没有注册Util,也没有定义#labels
var。
那么,问题是如何以及在哪里做呢?
【问题讨论】:
【参考方案1】:此答案适用于 thymeleaf 2.x。
如果您使用的是 thymeleaf 3.x 或更高版本,请查看其他答案。
public class MyDialect extends AbstractDialect implements IExpressionEnhancingDialect
public MyDialect()
super();
@Override
public String getPrefix()
// @see org.thymeleaf.dialect.IDialect#getPrefix
return "xxx";
@Override
public boolean isLenient()
return false;
@Override
public Map<String, Object> getAdditionalExpressionObjects(IProcessingContext ctx)
Map<String, Object> expressions = new HashMap<>();
expressions.put("labels", new LabelUtil());
return expressions;
并注册您的方言。
@Configuration
public class ThymeleafConfig
@Bean
public MyDialect myDialect()
return new MyDialect();
thymeleaf-extras-java8time 源代码是创建自定义 thymeleaf 表达式的良好参考。
【讨论】:
【参考方案2】:注册自定义表达式对象的API有changed in Thymeleaf 3,例如:
public class MyDialect extends AbstractDialect implements IExpressionObjectDialect
MyDialect()
super("My Dialect");
@Override
public IExpressionObjectFactory getExpressionObjectFactory()
return new IExpressionObjectFactory()
@Override
public Set<String> getAllExpressionObjectNames()
return Collections.singleton("myutil");
@Override
public Object buildObject(IExpressionContext context,
String expressionObjectName)
return new MyUtil();
@Override
public boolean isCacheable(String expressionObjectName)
return true;
;
【讨论】:
是否可以仅使用一种方言注册多个实用程序类?以上是关于Thymeleaf - 如何添加自定义实用程序?的主要内容,如果未能解决你的问题,请参考以下文章
用于添加自定义实用程序的 Tailwind 插件不适用于 Next