JSTL是编写前台页面时常用的组件。应用非常广泛。偶最近初次使用,遇到了不少问题。于是把一个细节写下来,和大家共勉。
有这样一段代码,类似于java里的if-else语句,请看:
<c:choose>
<c:when test="${infoQuestionOption.otherOption == '0'} " >
<td align="center">其他</td>
</c:when>
<c:otherwise>
<td align="center"><c:out value="${infoQuestionOption.name} "/></td>
</c:otherwise>
</c:choose>
<c:when test="${infoQuestionOption.otherOption == '0'} " >
<td align="center">其他</td>
</c:when>
<c:otherwise>
<td align="center"><c:out value="${infoQuestionOption.name} "/></td>
</c:otherwise>
</c:choose>
但是,这段代码是不执行的。也就是我们在页面上看不到“其他”的字样,也看不到从数据库中提取的“name”的值。请教了不少使用JSTL多时的同事也一时找不到原因。输出“otherOption”的值,也是正确的。
于是找到Sun提供的一份JavaEE教程,仔细看了关于JSTL的示例代码,这里贴上一段:
<c:choose>
<c:when test="${count == 0}" >
No records matched your selection.
</c:when>
<c:otherwise>
${count} records matched your selection.
</c:otherwise>
</c:choose>
然后仔细对比条件判断的语句:
我的:<c:when test="${infoQuestionOption.otherOption == '0'} " >
例子:<c:when test="${count == 0}" >
例子:<c:when test="${count == 0}" >
发现一个小小的差异:就是最后的上面2行代码中表红的地方,我写的句子在"}"和“"”之间有一个空格。不经意把这个
空格去除,天,居然能正确运行了!
这就是问题的最终根源。
总结一下,JSTL的EL表达式中,最好不要在表达式使用的引号之间存在空格。