百里香的自定义功能

时间:2014-06-08 10:26:04

标签: java thymeleaf

我的servlet设置了百万富翁模板,但我不知道如何在百里香中创建一个自定义函数或类似东西。

我基本上想要这样的东西:

<img th:src="${createJpegUrl(640,1,0.7,'some-key')}" />

这使得:

<img src="/640/1/0.7/some-key.jpg"/>

我一直在谷歌上搜索文档而没有更近距离。

3 个答案:

答案 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;
}