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(本身份识别码)。内容}