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