You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用JSTL比较字符串始终失败,请求技术帮助

关于JSTL字符串比较始终失败的问题

环境

  • TOMCAT 7.0.47
  • JRE6

已导入标签库

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

代码示例

<c:forEach var="result" items="${resultList}">
    <tr>
        <td>${result.DIV}</td>
        <td>${result.DIV_NAME}</td>
        <td>${result.STAFF_CODE}</td>
        <td>${result.STAFF_NAME}</td>
         <td>
            <c:choose>
                <c:when test="${result.STAFF_TYPE == 'DOC'}">DOCTOR</c:when>
                <c:when test="${result.STAFF_TYPE == 'RES'}">RESIDENT</c:when>
                <c:when test="${result.STAFF_TYPE == 'TRE'}">TRAINEE</c:when>
                <c:otherwise>no</c:otherwise>
            </c:choose>
        </td>
        <td>${result.STAFF_FLAG == 1 ? 'A' : (result.STAFF_FLAG == 2 ? 'B' : '其他')}</td>
    </tr>
</c:forEach>

问题现象

result.STAFF_TYPE的比较逻辑始终不生效,所有条目都进入<c:otherwise>分支,页面显示"no"。但result.STAFF_FLAG的三目运算能正常工作,可按预期显示'A'、'B'或'其他'。

已尝试操作

  • 将比较运算符从==替换为eq,代码示例:
    <c:when test="${result.STAFF_TYPE eq 'DOC'}">DOCTOR</c:when>
    
    问题未解决。
  • 在<c:otherwise>中输出result.STAFF_TYPE,确认数据已正常接收,能正确显示'DOC'、'RES'、'TRE'。

解决建议

1. 处理字符串前后空白

如果STAFF_TYPE存在不可见的前后空格,会导致比较失败。可以使用JSTL函数库的trim()方法处理后再比较:

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<c:when test="${fn:trim(result.STAFF_TYPE) eq 'DOC'}">DOCTOR</c:when>
<c:when test="${fn:trim(result.STAFF_TYPE) eq 'RES'}">RESIDENT</c:when>
<c:when test="${fn:trim(result.STAFF_TYPE) eq 'TRE'}">TRAINEE</c:when>

2. 检查数据类型并转为字符串

如果后端返回的STAFF_TYPE不是String类型(比如枚举、Character),直接与字符串字面量比较会失败。可以尝试调用toString()方法转换后再比较:

<c:when test="${result.STAFF_TYPE.toString() eq 'DOC'}">DOCTOR</c:when>

3. 显式调用equals方法

在EL表达式中直接调用字符串的equals()方法进行比较:

<c:when test="${result.STAFF_TYPE.equals('DOC')}">DOCTOR</c:when>

内容的提问来源于stack exchange,提问作者jun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 23:47:31