在 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 它对我有用。
我在使用 EL 时遇到了一个奇怪的问题。
我只想在 EL 中使用 String.join(),但它不起作用。
#{String.join(',', myList)}
除了阻止我的页面加载外,这在 JSF 中没有做任何事情。我知道我可以用 <ui:repeat>
做到这一点,但我需要在 EL 表达式中使用它。
有什么想法吗?
不能用 EL 调用静态方法。使用调用 String.join()
@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 它对我有用。