EL中的字符串连接

Tom*_*ker 56 java string jsp jstl el

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

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

${(empty value)? "none" : value + " enabled"}
Run Code Online (Sandbox Code Playgroud)

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

Joe*_*ard 102

使用EL 2,您可以执行以下操作:

#{'this'.concat(' is').concat(' a').concat(' test!')}
Run Code Online (Sandbox Code Playgroud)

  • `$ {'this'.concat('是').concat('a').concat('test!')}`将是正常形式. (4认同)

McD*_*ell 46

这个答案已经过时了.技术已经发展.除非您使用遗留系统,否则请参阅Joel的回答.


EL中没有字符串连接运算符.如果您不需要连接字符串来传递给其他操作,只需将这些表达式放在一起:

${value}${(empty value)? 'none' : ' enabled'}
Run Code Online (Sandbox Code Playgroud)


Bal*_*usC 40

如果您已经使用EL 3.0(Java EE 7; WildFly,Tomcat 8,GlassFish 4等),那么您可以使用new +=运算符:

<c:out value="${empty value ? 'none' : value += ' enabled'}" />
Run Code Online (Sandbox Code Playgroud)

如果你还没有使用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')}" />
Run Code Online (Sandbox Code Playgroud)

或者,如果您还没有使用EL 2.2,那么使用JSTL <c:set>创建一个新的EL变量,其中连接的值只是内联值:

<c:set var="enabled" value="${value} enabled" />
<c:out value="${empty value ? 'none' : enabled}" />
Run Code Online (Sandbox Code Playgroud)


Ani*_*rni 12

从表达式语言3.0开始,使用+ =运算符进行字符串连接是有效的.

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

引用EL 3.0规范.

字符串连接运算符

评估

A += B 
Run Code Online (Sandbox Code Playgroud)
  • 强制A和B为字符串.
  • 返回A和B的连接字符串.