【问题标题】:Use static methods in EL在 EL 中使用静态方法
【发布时间】:2017-01-25 10:25:53
【问题描述】:

我在 EL 方面遇到了一个奇怪的问题。

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

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

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

有什么想法吗?

【问题讨论】:

    标签: jsf el static-methods


    【解决方案1】:

    你不能用 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 3.0?
    • @BalusC 我写了你关于用标签声明 EL 的答案,但我觉得很愚蠢,我不明白在我的情况下我应该怎么做(使用字符串连接)......跨度>
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2011-09-17
        • 2016-07-27
        • 1970-01-01
        • 1970-01-01
        • 2011-02-01
        • 2017-06-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多