【问题标题】:JSP EL String concatenation [duplicate]JSP EL字符串连接[重复]
【发布时间】:2011-03-12 12:06:22
【问题描述】:

如何在 EL 中连接字符串?

我想做这样的事情,但它不起作用:

${var1 == 0 ? 'hi' : 'hello ' + var2}

尝试将'hello' 转换为Double 时会引发异常

【问题讨论】:

标签: jsp el


【解决方案1】:

使用 java 字符串连接效果更好。

#{var1 == 0 ? 'hi' : 'hello'.concat(var2)}

这里的好处是你也可以将它传递给一个函数,例如

#{myCode:assertFalse(myVar == "foo", "bad myVar value: ".concat(myVar).concat(", should be foo"))}

【讨论】:

  • 请注意,这仅适用于全新的 EL 2.2,不适用于 2001 年至今的旧 EL 版本。
【解决方案2】:

+ 运算符在 JSP Expression Language 中始终表示数字加法。要进行字符串连接,您必须使用多个相邻的 EL 表达式,例如 ${str1}${str2}

如果我正确阅读了您的示例,则可以写为:

${var1 == 0 ? 'hi' : 'hello '}${var1 == 0 ? '' : var2}

编辑

另一种可能是使用JSTL,它更长,但如果有更多依赖于var1的文本可能会更清晰:

<c:choose>
    <c:when test="${var1 == 0}">hi</c:when>
    <c:otherwise>hello <c:out value="${var2}"/></c:otherwise>
</c:choose>

c:out 可能不需要,具体取决于 JSP 版本。

【讨论】:

  • 我希望我不必这样做......每次都重复这个条件。我的例子是一个简化,在实际场景中,每次我想重复这个例子3次:(
【解决方案3】:

我知道这是一个老话题,但这个问题的答案在过去六个月中发生了变化,重要的是要注意这一变化,IMO(因为我通过谷歌搜索“el concatenate strings”找到了这个)。

从 EL Expression 3.0(公开投票于 2012 年 8 月批准,随 Java EE 7 一起发布)起,提问者最初使用的语法的一个变体现在有效:

${var1 == 0 ? 'hi' : 'hello ' += var2}

对于使用+= 而不是+ 存在很多分歧,但事实就是如此。这将按预期正确评估和连接字符串。您也可以使用cat 运算符代替+= 运算符:

${var1 == 0 ? 'hi' : 'hello ' cat var2}

虽然这现在是合法的,但请注意,在您的 Web 容器(Tomcat、Jetty、GlassFish 等)发布支持 Java EE 7/EL 3.0 的新版本之前,您将无法使用它。这预计在 2013 年底之前的某个时间,可能最早在秋天。

于 2015 年 2 月 19 日编辑,注意最终运算符是 +=,而不是最初回答的 +

【讨论】:

  • 看到未来的好答案! +1
  • 很遗憾,这是不正确的。在最后一刻,几乎每个人都非常不满,他们将运算符从完全合乎逻辑的“+”更改为高度混乱的“+=”。我不知道这些人在抽什么:X
  • 德克斯特是正确的。感谢您的澄清。我将编辑我的答案。
  • 亲爱的 Nick Williams - 如何对您的示例进行串联: 全名: ${fn:escapeXml(user.lastName) += ', ' += fn:escapeXml(user.firstName)} 。这段代码来自你的书(chap6 profile.jsp)。我不知道 - 但发生了错误。
【解决方案4】:

已经提到的所有内容的另一种选择:

<c:set var="hellovar2" value="hello ${var2}" />
${var1 == 0 ? 'hi' : hellovar2}

【讨论】:

    猜你喜欢
    • 2011-01-12
    • 2010-09-22
    • 1970-01-01
    • 2011-04-08
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    • 2011-09-11
    相关资源
    最近更新 更多