在EL中使用静态方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在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)}

另一答案

我找到了解决方法。

在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,它对我有用。

另一答案

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

以上是关于在EL中使用静态方法的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JSP/EL 中调用静态方法?

无法对非静态方法 getAssets() 进行静态引用 - 无法在片段中播放音频

javaweb之EL自定义函数

支持动态或静态片段的不同屏幕尺寸?

如何创建自定义 EL 函数来调用静态方法?

从片段调用活动方法