【问题标题】:How to concatenate a String in EL?如何在 EL 中连接字符串?
【发布时间】:2011-09-11 22:34:04
【问题描述】:

如何让promoPrice 变量作为字符串ONLY $4.67 的一部分打印?

<c:set var="promoPrice" value="4.67" />
<p>${(promoPrice != null) ? "ONLY $${promoPrice}" : "FREE"}</p>

【问题讨论】:

  • 我的建议解决了您的问题吗?即将 $promoPrice 移到引号之外。
  • @rationalSpring 不,这不起作用。我猜你不能那样传递变量。不过还是谢谢。

标签: jsp jstl el string-concatenation


【解决方案1】:

与 EL 2.0+ 兼容的字符串连接的直接且稳健的解决方案是使用中间变量:

<c:set var="promoPrice" value="4.67" />
<c:set var="priceText" value="ONLY ${promoPrice}" />
<p>${(promoPrice != null) ? priceText : "FREE"}</p>

根据@BalusC,从EL 2.2开始你可以使用String#concat()方法进行连接,从EL 3.0开始你可以使用新的+=操作符。

【讨论】:

    【解决方案2】:

    我做了这样的事情,我有一个变量mathjaxUrl,我想用其他字符串联系它

    <c:set var="mathjaxUrl" value="https://cdnjs.cloudflare.com/ajax/libs/mathjax" />
    ... some other stuff here
    <c:set var="mathjaxUrl" value="${mathjaxUrl}?config=TeX-AMS-MML_HTMLorMML" />
    

    希望对你有帮助

    【讨论】:

      【解决方案3】:

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

      <p>${not empty promoPrice ? 'ONLY $' += promoPrice : 'FREE'}</p>
      

      如果您还没有使用 EL 3.0,则使用 E​​L 2.2(Java EE 7;JBoss AS 6/7,Tomcat 7,GlassFish 3 等)调用带参数的直接方法,然后应用String#concat():

      <p>${not empty promoPrice ? 'ONLY $'.concat(promoPrice) : 'FREE'}</p>
      

      或者,如果您还没有使用 EL 2.2,那么使用 JSTL &lt;c:set&gt; 创建一个新的 EL 变量,其中连接的值刚刚内联在值中:

      <c:set var="promoPriceString" value="ONLY $${promoPrice}" />
      <p>${not empty promoPrice ? promoPriceString : 'FREE'}</p>
      

      你的特殊情况中,另一种方法是将表达式分成两部分:

      <p>${not empty promoPrice ? 'ONLY $' : 'FREE'}${promoPrice}</p>
      

      如果${promoPrice} 为 null 或为空,则无论如何都不会打印。

      【讨论】:

      • 非常感谢!出于某种原因,我在任何地方都找不到关于这种连接的信息。
      • 'str1'.concat(' str2') 在 EL 2.1 (Tomcat 6) 中失败并出现此错误 org.apache.jasper.JasperException: /WEB-INF/pages/x.jsp The function concat must be used with a prefix when未指定默认命名空间。
      【解决方案4】:

      这行不通吗?

      <c:set var="promoPrice" value="4.67" />
      <p>${(promoPrice != null) ? "ONLY $"${promoPrice} : "FREE"}</p>
      

      请注意 ${promoPrice} 在引号之外。这看起来是最简单的解决方案。

      【讨论】:

      • 为什么是-1?评价这个答案的人能解释一下吗?
      • 这不是合法的 EL 语法;来自EL specification (2.2 mrel):嵌套的 eval 表达式,例如 ${item[${i}]},是非法的。
      【解决方案5】:

      直接jstl方式

      <c:set var="promoPrice" value="4.67" />
      <p>
      <c:choose>
          <c:when test="${(promoPrice != null)}">
              ONLY $${promoPrice}
          </c:when>
          <c:otherwise>
              FREE
          <c:otherwise>
      </c:choose>
      </p>
      

      【讨论】:

      • 我喜欢这个版本,我只是在寻找更紧凑的东西。谢谢!
      • 是的,它有点冗长,但很清楚,尤其是如果您在其他地方使用 jstl 时
      猜你喜欢
      • 2012-07-03
      • 1970-01-01
      • 2010-09-22
      • 1970-01-01
      • 2015-07-10
      • 1970-01-01
      • 2011-04-08
      相关资源
      最近更新 更多