【问题标题】:How to store a character using JSTL <c:set>如何使用 JSTL <c:set> 存储字符
【发布时间】:2012-08-21 10:57:05
【问题描述】:

我想使用 JSTL 将字符值存储在变量中

我的代码是:

<c:set var="letter" value='${param.colorLetter.toLowerCase().charAt(0)}' ></c:set>

接下来我需要尝试检查字符是否为'v':

        <c:choose>
            <c:when test="${letter}=='v'">
                <lable>Color Name: </lable>Violet<br/>
            </c:when>
        </c:choose>

目前我觉得它没有将其存储为字符变量,因此测试失败。 (没有错误/异常)

【问题讨论】:

    标签: java jstl


    【解决方案1】:
    <c:set var="letter" value="${param.colorLetter.toLowerCase().charAt(0).toString()}" />
    
    <c:choose>
        <c:when test="${letter eq 'v'}">
            <lable>Color Name: </lable>Violet<br/>
        </c:when>
    </c:choose>
    

    您必须将整个测试放在${} 之间,并在charAt(0) 之后添加toString() 以从Character 转换为String

    【讨论】:

    • 这样做会引发以下异常:“无法将 java.lang.String 类型的 'v' 转换为 java.lang.Long”
    • 你能复制/粘贴param.colorLetter的值吗?
    • 我使用 "" 来显示其内容以进行调试。它似乎正确打印为“v”
    • 你能用'${letter eq "v"}'代替你的试试吗(见引号/双引号的倒置)?
    • 问题是表达式语言使用字符的 ASCII 值,所以我可以简单地使用 ASCII 值代替 'v' 并且它可以工作。不过这样不太方便。
    【解决方案2】:

    以防万一这对其他人有用,我能够通过使用“sp00m”建议来解决此问题。

    <c:set var="letter" value='${param.colorLetter.toLowerCase().charAt(0).toString()}' ></c:set>
    

    表达式语言将其存储为字符,然后评估它必须涉及比较 ascii 值。上述方法将字符转换为字符串,然后将其存储在“字母”变量中。那么这只是一个简单的字符串比较的问题:

    <c:when test='${letter=="v"}'>
    

    【讨论】:

      猜你喜欢
      • 2011-05-14
      • 1970-01-01
      • 2015-11-21
      • 1970-01-01
      • 1970-01-01
      • 2014-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多