JSTL 字符串比较失败,十有八九是因为值里藏了看不见的空白——首尾空格、制表符这些。直接拿 ==eq 去比,字符串实际不相等,结果就是永远跑进 分支。怎么破?用 JSTL 函数库的 fn:trim() 先清理一下数据,问题就解决了。

在实际开发中,尤其是从数据库或外部系统捞字符串字段(比如 STAFF_TYPE),数据录入、SQL 查询、ORM 映射……随便哪个环节都可能给值带上首尾空格、制表符甚至不可见 Unicode 字符。这些字符肉眼看不见,但语义上就是不一样。导致 JSTL 里 的判断永远为 false —— 哪怕页面上显示的是 'DOC',真实长度也可能比预期多一个(比如 fn:length(result.STAFF_TYPE) 返回 4 而不是 3),这就铁证了隐藏空格的存在。

✅ 正确做法:用 fn:trim() 清理后再比较

首先确认 JSP 顶部已经声明了 JSTL 函数标签库:

<%@ taglib prefix="c" uri="http://ja va.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://ja va.sun.com/jsp/jstl/functions" %>

然后在 里对目标字符串先调用 fn:trim()


    DOCTOR
    RESIDENT
    TRAINEE
    ${fn:trim(result.STAFF_TYPE)}

? 提示:==eq 在 JSTL EL 里功能等价,都能用来比较字符串。fn:trim() 只移除首尾空白(U+0020、\t\n\r),不影响内部空格。如果还需要更严格的清理(比如要去掉所有空白或特殊字符),可以考虑写个自定义函数或者在后端提前预处理。

? 快速诊断技巧

⚠️ 注意事项

fn:trim() 预处理一下,隐藏空白导致的字符串比较失效问题就彻底解决了,业务逻辑分支也能准确执行。说到底,这类坑一旦知道原因,处理起来并不复杂。

本文转载于:https://www.php.cn/faq/2824530.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。