我的工作是编辑用户和他们的通知邮件的简单形式。
用户可以有3封电子邮件(0至3)。虽然我创建3输入如下:
<%
List<String> notifEmails = // some code to get user's emails
pageContext.setAttribute("notifEmails", notifEmails);
%>
<c:forEach begin="0" end="2" var="index">
<li>
<label>adresse ${index + 1} :</label>
<input type="email" value="${notifEmails[index]}">
</li>
</c:forEach>
我很惊讶没有一个IndexOutOfBoundsException当我有一个用户在这个表达式${notifEmails[index]}
少于3封电子邮件。我试图找到一些解释在网络上,但我发现没有关于这种情况。我想确保了解这里发生了什么。
有人知道原因吗?
1条答案
按热度按时间n9vozmp41#
我需要大量的调试,但我找到了它。当你阅读规范时,EL是一种语言,它选择只有在没有可能的默认值可以替代时才抛出异常。在我的例子中,表达式
${notifEmails[index]}
由ArrayELResolver
在此方法中解析:如果
index
不在数组的边界内,EL将返回null
作为“我找不到该值”。然后EL将
null
强制为String
,并且在规范中必须将null强制为空字符串。因此,该行为符合规范,属于正常行为。
(对不起,tomcat异常屏幕!:D)