我想在EL(表达式语言)中连接三态运算符中的字符串。EL中的字符串串联
假设有一个名为value的变量。如果它是空的,我想使用一些默认文本。否则,我需要附加一些静态文本。
${(empty value)? "none" : value + " enabled"}
但是这不会编译。什么是写这个的正确方法?或者这甚至有可能?
我想在EL(表达式语言)中连接三态运算符中的字符串。EL中的字符串串联
假设有一个名为value的变量。如果它是空的,我想使用一些默认文本。否则,我需要附加一些静态文本。
${(empty value)? "none" : value + " enabled"}
但是这不会编译。什么是写这个的正确方法?或者这甚至有可能?
这个答案已经过时了。技术已经发展。除非您使用旧版系统,否则请参阅Joel's answer。
EL中没有字符串连接运算符。如果您不需要连接字符串传递到一些其他的操作,只是把这些表达彼此相邻:
${value}${(empty value)? 'none' : ' enabled'}
如果你已经在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>
创建一个新的EL变量,只是内联的价值连接值:
<c:set var="enabled" value="${value} enabled" />
<c:out value="${empty value ? 'none' : enabled}" />
1. +(运营商)使用EL没有影响到这一点。 2.so这是使用的方式
<c:set var="enabled" value="${value} enabled" />
<c:out value="${empty value ? 'none' : enabled}" />
对您有帮助吗?
随着EL 2,你可以做到以下几点:
#{'this'.concat(' is').concat(' a').concat(' test!')}
'$ {'this'.concat('is')。concat('a')。concat('test!')}'是常规形式。 – 2014-01-29 11:46:42
这是否适用于非字符串类型,例如'$ {'我am'.concat('数字').concat(1).concat('!')}'? – 2015-07-29 22:30:52
@MartinCarney concat()只支持字符串参数 – 2015-07-30 07:23:34
由于表达语言3.0,它是有效使用+ =操作字符串连接。
${(empty value)? "none" : value += " enabled"} // valid as of EL 3.0
字串连接操作符
为了评价
A += B
- 胁迫A和B的字符串。
- 返回A和B的连接字符串。
Mc Dowell's answer是对的。我只想补充的改善,如果万一你可能需要返回变量的值:
${ empty variable ? '<variable is empty>' : variable }
它也可以是一个伟大的想法使用CONCAT为EL + MAP + JSON问题就像这个例子:
#{MYMAP [“”。CONCAT(本身份识别码)。内容}
缩进四个空格代码块,并使用反引号字符逸出角括号。 http://stackoverflow.com/editing-help – McDowell 2010-09-04 15:23:30
与BalusC完全相同的解决方案,但一天后?嗯... – neizan 2013-05-15 12:13:20