代码之家  ›  专栏  ›  技术社区  ›  Kyle

JSP EL字符串串联[重复]

  •  72
  • Kyle  · 技术社区  · 15 年前

    如何在EL中连接字符串?

    我想做这样的事,但行不通:

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

    它在尝试强制转换时抛出异常 'hello' Double

    4 回复  |  直到 15 年前
        1
  •  67
  •   informatik01 Viswanath Lekshmanan    6 年前

    这个 + 运算符在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版本。

        2
  •  80
  •   Mike Haefele    14 年前

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

    这里的好处是您还可以将其传递到函数中,例如

    #{myCode:assertFalse(myVar == "foo", "bad myVar value: ".concat(myVar).concat(", should be foo"))}
    
        3
  •  43
  •   Nick Williams    10 年前

    我知道这是一个老话题,但是这个问题的答案在过去的六个月里发生了变化,我必须注意到这个变化,IMO(因为我是通过google“el concatenate strings”找到这个问题的)。

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

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

    += + ,但事实就是这样。这将按预期正确地计算和连接字符串。您也可以使用 cat 运算符而不是

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

    编辑:2015-02-19 注意到最后一个操作员 += 而不是 + 正如最初的回答。

        4
  •  14
  •   David L.    13 年前

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