在EL中使用静态方法

时间:2017-01-25 10:25:54

标签: jsf el static-methods

我在这里遇到一个奇怪的问题。

我只想在EL中使用String.join(),但它无效。

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

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

有什么想法吗?

3 个答案:

答案 0 :(得分:4)

您无法使用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)}

答案 1 :(得分:2)

我找到了解决方法。

在faces-config.xml

中将您的util类注册为bean
<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,它对我有用。

答案 2 :(得分:0)

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