我的servlet设置了百万富翁模板,但我不知道如何在百里香中创建一个自定义函数或类似东西。
我基本上想要这样的东西:
<img th:src="${createJpegUrl(640,1,0.7,'some-key')}" />
这使得:
<img src="/640/1/0.7/some-key.jpg"/>
我一直在谷歌上搜索文档而没有更近距离。
答案 0 :(得分:1)
您还可以创建和使用 bean。我不清楚 createJpegUrl
的用途,因此在下面的示例中我实现了类似的逻辑。请专注于解决方案的架构,而不是实现。
@Bean("pathGenerator")
public Function<String, String> pathGenerator() {
return i -> "/" + String.join("/", i.split("|"));
}
您可以在 @Configuration
类中添加上述声明,以便 Bean 在您的上下文中可用(取决于您使用的 DI 机制)。
最后,在你的 thymeleaf 模板中使用这个 Bean,如下所示,
<img th:src="${@pathGenerator.apply('640|1|0.7|' + some_key)}" />
使用函数式接口,您可以创建一个模型来用作 Function
的输入,而不是我在示例中使用的字符串。
此外,您可以创建自己的 @FunctionalInterface
以允许多个输入参数,例如以下示例(未测试),
@FunctionalInterface
interface CreateJpegUrl<Integer, Integer, Double, String, String> {
public String apply(Integer width, Integer height, Double ratio, String name);
}
并创建一个 Bean 之类的,
@Bean("pathGenerator")
public CreateJpegUrl<Integer, Integer, Double, String, String> pathGenerator() {
return (w, h, r, n) -> {
// Your logic
};
}
最后,像这样使用
<img th:src="${@pathGenerator.apply(640, 1, 0.7, some_key)}" />
答案 1 :(得分:0)
扩展AbstractAttrProcessor将允许您匹配特定属性。
我最终扩展了AbstractElementProcessor并将其添加到StandardDialect。这是因为我需要做一些额外的事情。
答案 2 :(得分:0)
您可以创建一个助手类:
public class JpegHelper {
public static JpegHelper getInstance() {...}
public String createJpegUrl( int w, int h, double d, String key {
...
}
}
然后将其添加到控制器中的模型中
modelAndView.getModelMap().addAttribute( "jpegHelper", JpegHelper.getInstance() );
并在您的百里香模板中使用它:
<img th:src="${jpegHelper.createJpegUrl(640,1,0.7,'some-key')}" />
如果您希望所有模板都可以使用该助手而不将其添加到模型中,请在您的spring配置中注册它:
@Bean
public ThymeleafViewResolver thymeleafViewResolver( @Autowired SpringTemplateEngine templateEngine ) {
ThymeleafViewResolver thymeleafViewResolver = new ThymeleafViewResolver();
thymeleafViewResolver.setTemplateEngine( templateEngine );
thymeleafViewResolver.setCharacterEncoding( "UTF-8" );
thymeleafViewResolver.addStaticVariable( "jpegHelper", JpegHelper.getInstance() );
return thymeleafViewResolver;
}