2010-09-03 70 views
52

我想在EL(表达式语言)中连接三态运算符中的字符串。EL中的字符串串联

假设有一个名为value的变量。如果它是空的,我想使用一些默认文本。否则,我需要附加一些静态文本。

${(empty value)? "none" : value + " enabled"} 

但是这不会编译。什么是写这个的正确方法?或者这甚至有可能?

回答

42

这个答案已经过时了。技术已经发展。除非您使用旧版系统,否则请参阅Joel's answer


EL中没有字符串连接运算符。如果您不需要连接字符串传递到一些其他的操作,只是把这些表达彼此相邻:

${value}${(empty value)? 'none' : ' enabled'} 
38

如果你已经在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}" /> 
0

1. +(运营商)使用EL没有影响到这一点。 2.so这是使用的方式

<c:set var="enabled" value="${value} enabled" /> 


<c:out value="${empty value ? 'none' : enabled}" /> 

对您有帮助吗?

+0

缩进四个空格代码块,并使用反引号字符逸出角括号。 http://stackoverflow.com/editing-help – McDowell 2010-09-04 15:23:30

+5

与BalusC完全相同的解决方案,但一天后?嗯... – neizan 2013-05-15 12:13:20

91

随着EL 2,你可以做到以下几点:

#{'this'.concat(' is').concat(' a').concat(' test!')} 
+4

'$ {'this'.concat('is')。concat('a')。concat('test!')}'是常规形式。 – 2014-01-29 11:46:42

+0

这是否适用于非字符串类型,例如'$ {'我am'.concat('数字').concat(1).concat('!')}'? – 2015-07-29 22:30:52

+1

@MartinCarney concat()只支持字符串参数 – 2015-07-30 07:23:34

11

由于表达语言3.0,它是有效使用+ =操作字符串连接。

${(empty value)? "none" : value += " enabled"} // valid as of EL 3.0 

引用EL 3.0 Specification

字串连接操作符

为了评价

A += B 
  • 胁迫A和B的字符串。
  • 返回A和B的连接字符串。
1

Mc Dowell's answer是对的。我只想补充的改善,如果万一你可能需要返回变量的值:

${ empty variable ? '<variable is empty>' : variable } 
0

它也可以是一个伟大的想法使用CONCAT为EL + MAP + JSON问题就像这个例子:

#{MYMAP [“”。CONCAT(本身份识别码)。内容}