JSTL c:forEach索引超集合大小未抛IndexOutOfBoundsException原因
为什么EL表达式访问List超出索引不会抛出IndexOutOfBoundsException?
这是EL(表达式语言)的容错设计特性导致的,和原生Java的行为完全不同:
- 原生Java中调用
List.get(index),若索引超出集合实际长度会直接抛出IndexOutOfBoundsException;但EL为保证视图层稳定性,对这类场景做了静默处理。 - 当使用
${notifEmails[index]}访问List时,若索引超出集合实际元素数量,EL不会抛出异常,而是直接返回null。 - HTML的
input元素遇到value为null时,会自动渲染成空字符串,因此页面只会显示空输入框,不会出现报错或页面崩溃的情况。
EL的这种设计逻辑,是为了避免因数据的小瑕疵(比如集合元素数量不足)导致整个页面无法正常渲染——视图层需要优先保证用户能看到完整页面,而非直接抛出异常中断流程。
内容的提问来源于stack exchange,提问作者Mohicane
相关产品推荐
相关产品推荐

