要是能代替就好了
${myvar eq 'foo' or myvar eq 'bar' or myvar eq 'john' or myvar eq 'doe' or myvar eq ...}
由任一个
${myvar in ['foo', 'bar', 'john', 'doe', ...]}
或
${myvar in {'foo', 'bar', 'john', 'doe', ...}}
但它们都不起作用。任何替代解决方案?
最佳答案
首先为此创建一个 EL 函数。 Facelets 的启动示例可以在 this answer 中找到。另一个用于 JSP 的可以在 our EL wiki page 底部附近的某处找到.
public static boolean contains(Object[] array, Object item) {
if (array == null || item == null) {
return false;
}
for (Object object : array) {
if (object != null && object.toString().equals(item.toString())) {
return true;
}
}
return false;
}
(或者,如果您使用的是 JSF 实用程序库 OmniFaces,请使用它的 of:contains()
,尽管它仅适用于 Facelets,不适用于已弃用的 JSP)
然后按如下方式使用它:
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@taglib prefix="my" uri="http://my.example.com/functions" %>
...
${my:contains(fn:split('foo,bar,john,doe', ','), myvar)}
(fn:split()
只是将分隔的 String
转换为 String[]
的技巧)
您甚至可以通过直接传递定界字符串并在函数中执行拆分来进一步简化/专门化它,这样您就可以像这样结束:
${my:contains('foo,bar,john,doe', myvar)}
关于java - 表达语言 : how to simplify this statement ("in"-like clause needed),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14339443/