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

JSP中fn:substring函数在alert中无响应,无报错如何解决?

问题解决方法

核心问题分析

你的代码存在两个关键问题导致alert无法弹出:

  1. JSTL函数参数不合法:fn:substring不支持负起始索引,fn:substring("abcxyz", -1,3)的写法违反JSTL规范,会导致截取结果为空或无法被正确解析,最终生成的JS代码可能是alert()(无有效内容),自然不会弹出弹窗。
  2. JS语法存在漏洞:即便EL表达式能输出内容,alert(${fn:...})的写法会让JS把输出值当作变量而非字符串。比如EL输出abc时,JS代码会变成alert(abc),若不存在abc变量会触发语法错误;若EL输出空值,则直接无弹窗动作。

具体修复步骤

  • 修正JSTL截取逻辑:
    • 若要截取字符串前3位(得到"abc"),直接使用fn:substring("abcxyz", 0, 3);
    • 若要截取最后3位,需结合fn:length计算起始索引:fn:substring("abcxyz", fn:length("abcxyz")-3, fn:length("abcxyz"))。
  • 给alert内容添加引号:修改alert代码为带双引号的形式,确保JS将其识别为字符串:
    alert("${fn:substring("abcxyz", 0, 3)}");
    
  • 确认JSTL函数标签已引入:检查includes.jsp中是否包含JSTL函数标签声明,若没有,需在页面顶部添加:
    <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
    
  • 验证事件触发逻辑:确认input[name=rnrInd]在页面加载时是否处于选中状态(你调用了.change()初始化触发事件),若初始未选中,需手动点击选中该元素才能触发if分支内的alert。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 00:31:14