在 EL 中使用静态方法

Use static methods in EL

我在使用 EL 时遇到了一个奇怪的问题。

我只想在 EL 中使用 String.join(),但它不起作用。

#{String.join(',', myList)}

除了阻止我的页面加载外,这在 JSF 中没有做任何事情。我知道我可以用 <ui:repeat> 做到这一点,但我需要在 EL 表达式中使用它。

有什么想法吗?

不能用 EL 调用静态方法。使用调用 String.join()

的方法创建一个 Bean
@RequestScoped
@Named
public class StringBean {

    public String join(CharSequence delimiter, Iterable<? extends CharSequence> elements) {
        return String.join(delimiter, elements);
    }
}

所以你可以调用#{stringBean.join(',', myList)}

您可以编写自定义函数,将您的静态方法公开为 EL 中的函数。已回答类似问题 here

我找到了解决这个问题的方法。

将您的实用程序 class 注册为一个 bean in the faces-config.xml

<managed-bean>
    <managed-bean-name>String</managed-bean-name>
    <managed-bean-class>java.lang.String</managed-bean-class>
    <managed-bean-scope>application</managed-bean-scope>
</managed-bean>

我正在使用 org.apache.commons。lang3.ArrayUtils 它对我有用。