EL中的string连接
我想在EL(expression式语言)中连接一个三元运算符中的string。
假设有一个名为value的variables。 如果它是空的,我想使用一些默认文本。 否则,我需要附加一些静态文本。
${(empty value)? "none" : value + " enabled"}
这不会编译。 什么是写这个的正确方法? 或者这甚至有可能?
这个答案已经过时了。 技术已经发展。 除非你使用遗留系统,否则请看Joel的答案 。
EL中没有string连接运算符。 如果您不需要连接的string进入其他操作,只需将这些expression式相邻放置即可:
${value}${(empty value)? 'none' : ' enabled'}
有了EL 2,您可以执行以下操作:
#{'this'.concat(' is').concat(' a').concat(' test!')}
如果你已经使用了EL 3.0(Java EE 7; WildFly,Tomcat 8,GlassFish 4等),那么你可以使用新的+=
操作符来实现:
<c:out value="${empty value ? 'none' : value += ' enabled'}" />
如果你还没有使用EL 3.0,并且该value
是一个真正的java.lang.String
实例(因此不是java.lang.Long
),那么使用EL 2.2(Java EE 7; JBoss AS 6/7, Tomcat 7,GlassFish 3等)调用带有参数的直接方法的能力,然后将其应用于String#concat()
:
<c:out value="${empty value ? 'none' : value.concat(' enabled')}" />
或者,如果你甚至还没有使用EL 2.2,那么使用JSTL <c:set>
来创build一个新的ELvariables,其串联值只是内联值:
<c:set var="enabled" value="${value} enabled" /> <c:out value="${empty value ? 'none' : enabled}" />
由于expression式语言3.0,对于string连接使用+ =运算符是有效的。
${(empty value)? "none" : value += " enabled"} // valid as of EL 3.0
引用EL 3.0规范 。
string连接运算符
评估
A += B
- 强制A和B串起来。
- 返回A和B的连接string
Mc Dowell的答案是对的。 我只是想增加一个改进,如果你可能需要返回variables的值为:
${ empty variable ? '<variable is empty>' : variable }
1. +(算子)对于使用EL没有影响。 所以这就是使用它的方法
<c:set var="enabled" value="${value} enabled" /> <c:out value="${empty value ? 'none' : enabled}" />
这对你有帮助吗?
对于EL + MAP + JSON问题,使用concat也是一个好主意,就像这个例子:
#{MYMAP [ ''。CONCAT(本身份识别码)。内容}