JSP中fn:substring函数在alert中无响应,无报错如何解决?
问题解决方法
核心问题分析
你的代码存在两个关键问题导致alert无法弹出:
- JSTL函数参数不合法:
fn:substring不支持负起始索引,fn:substring("abcxyz", -1,3)的写法违反JSTL规范,会导致截取结果为空或无法被正确解析,最终生成的JS代码可能是alert()(无有效内容),自然不会弹出弹窗。 - 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"))。
- 若要截取字符串前3位(得到"abc"),直接使用
- 给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
相关产品推荐
相关产品推荐

