如何在 Thymeleaf 中使用自定义 Spring EL 函数?

How to use custom Spring EL function in Thymeleaf?

我写了这样一个函数:

public interface SUtils {

    static String reverseString(String input) {
        StringBuilder backwards = new StringBuilder();
        for (int i = 0; i < input.length(); i++) {
            backwards.append(input.charAt(input.length() - 1 - i));
        }
        return backwards.toString();
    }
}

并用StandardEvaluationContext.registerFunction注册这个函数。 而在controller中我使用@Value("#{#reverseString('hello')}")可以得到值。 但是在 thymeleaf 中,当我使用 ${reverseString('hello')} 时出现错误 Exception evaluating SpringEL expression: "reverseString('hello')".

如何在 thymeleaf 中使用自定义拼写?

前面没有办法测试,但随便用静态调用试试:

th:text="${T(com.package.SUtils).reverseString('hello')}"

我通常做的是使用 @Component 将 Thymeleaf 实用程序 类 定义为一个 Bean。在 Spring EL 中,您可以使用 @ 和自动检测来简单地引用它们。所以不需要注册。

@Component
public interface SUtils {

  static String reverseString(String input) {
    // ...
  }
}

<span th:text="${@sUtils.reverseString('hello')}"></span>

您可以在您的配置或应用程序中创建一个 Bean class,像这样

@Bean(name = "sUtils")
public SUtils sUtilsBean() {
    return new SUtils();
}