将 Java 字符与 EL 中的整数进行比较

Compare Java Char to Integer in EL

我有一个简单的要求,我想比较 EL 语法中的 Java Char 和 Integer,我该怎么做?

<select name="rating" id="id-rating">
    <c:forEach var="i" begin="1" end="5" > 
        <c:choose>
            <c:when test="${javaObject.rating == i }">
                <option value="${i }" selected="selected">${i }</option>
            </c:when>
            <c:otherwise>
                <option value="${i }">${i }</option>
            </c:otherwise>
        </c:choose>
    </c:forEach>
</select>${javaObject.rating }

我试过了

  1. "eq" 同狱
  2. var状态变量 例如 loop.index
  3. 还有loop.current

${javaObject.rating } 是我从 Java Class(Spring 控制器)

得到的

这对我来说很好

${1 eq Integer.parseInt('1')} // return true

这确实不行。技术问题是,char 1 的整数值为 49。 (代码点)。证据在这里:

System.out.println((int) '1'); // 49

因此,您需要添加一个整数偏移量以匹配字符的代码点。

<c:forEach var="i" begin="49" end="53"> 
    ${bean.rating == i}<br/>
</c:forEach>

或者,将 <c:set> 与 body 中的值一起使用,将值转换为 String。然后 EL 将以正确的方式进行自动强制转换。

<c:forEach var="i" begin="1" end="5">
    <c:set var="ratingAsString">#{bean.rating}</c:set>
    ${ratingAsString == i}<br/>
</c:forEach>

另请参阅:

  • Difference between specifying JSTL <c:set> value via attribute and body
  • How to compare a char property in EL