Wil*_*Dev 9 java thymeleaf spring-boot
Thymeleaf有许多有用的工具,如#strings.capitalize(...)或#lists.isEmpty(...).我正在尝试添加自定义但不知道如何注册.
制作了一个自定义的Util类:
public class LabelUtil {
public String[] splitDoubleWord(String str) {
return str.split("[A-Z]", 1);
}
}
Run Code Online (Sandbox Code Playgroud)
现在我要像这样使用它:
<span th:each="item : ${#labels.splitDoubleWord(name)}" th:text="${item}"></span>
Run Code Online (Sandbox Code Playgroud)
当然,它不起作用,因为我没有注册Util并定义了#labelsvar.
那么,问题是如何以及在何处进行呢?
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;
}
}
Run Code Online (Sandbox Code Playgroud)
并注册你的方言.
@Configuration
public class ThymeleafConfig {
@Bean
public MyDialect myDialect() {
return new MyDialect();
}
}
Run Code Online (Sandbox Code Playgroud)
thymeleaf-extras-java8time源代码是创建自定义百日咳表达式的好参考.
Thymeleaf 3 中用于注册自定义表达式对象的 API 已更改,例如:
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;
}
};
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3054 次 |
| 最近记录: |