EL中的字符串连接[重复]
Posted
技术标签:
【中文标题】EL中的字符串连接[重复]【英文标题】:String Concatenation in EL [duplicate] 【发布时间】:2011-04-08 02:28:23 【问题描述】:我想在 EL(表达式语言)的三元运算符中连接一个字符串。
假设有一个名为 value 的变量。如果它是空的,我想使用一些默认文本。否则,我需要在其上附加一些静态文本。
$(empty value)? "none" : value + " enabled"
但是这不会编译。写这个的正确方法是什么?或者这甚至可能吗?
【问题讨论】:
【参考方案1】:如果您已经使用 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" />
【讨论】:
上述+=
方法是目前为止最正确的解决方案。谢谢!【参考方案2】:
使用 concat 来解决 EL + MAP + JSON 问题也是一个好主意,就像在这个例子中一样:
#myMap[''.concat(myid)].content
【讨论】:
【参考方案3】:这个答案已经过时了。技术已经向前发展。除非您使用的是旧系统,否则请参阅 Joel's answer。
EL 中没有字符串连接运算符。如果您不需要将连接的字符串传递给其他操作,只需将这些表达式放在一起即可:
$value$(empty value)? 'none' : ' enabled'
【讨论】:
【参考方案4】:Mc Dowell's answer 是对的。如果您可能需要将变量的值返回为:
$ empty variable ? '<variable is empty>' : variable
【讨论】:
【参考方案5】:从表达式语言 3.0 开始,使用 += 运算符进行字符串连接是有效的。
$(empty value)? "none" : value += " enabled" // valid as of EL 3.0
引用EL 3.0 Specification。
字符串连接运算符
评估
将 A 和 B 强制转换为字符串。 返回 A 和 B 的连接字符串。A += B
【讨论】:
【参考方案6】:使用 EL 2,您可以执行以下操作:
#'this'.concat(' is').concat(' a').concat(' test!')
【讨论】:
$'this'.concat(' is').concat(' a').concat(' test!')
将是正常形式。
这是否适用于非字符串类型,例如$'I am'.concat(' number ').concat(1).concat('!')
?
@MartinCarney concat() 只支持字符串参数
调用非getter方法需要EL 2.2(见How can I check what version of EL is server using)
@Joel 不会 Java 将 String.concat()
的(非字符串)参数强制转换为 String 自动调用其 toString()
方法?【参考方案7】:
1.+(操作符)对EL的使用没有影响。 2.so this is the way, to use that
<c:set var="enabled" value="$value enabled" />
<c:out value="$empty value ? 'none' : enabled" />
这对你有帮助吗?
【讨论】:
为代码块缩进四个空格并使用反引号字符来转义尖括号。 ***.com/editing-help 与 BalusC 完全相同的解决方案,但要晚一天?嗯……以上是关于EL中的字符串连接[重复]的主要内容,如果未能解决你的问题,请参考以下文章