如果模型属性不存在,则在与JSTL c一起使用时:在测试布尔值时,它是否总是计算为false?

时间:2014-05-02 17:51:08

标签: jsp jstl el

例如,如果在jsp中我们放了:

<c:choose>
    <c:when test="${missingAttribute}">
         ...do something
    </c:when>
    <c:otherwise>
        ...something else
    </c:otherwise>
</c:choose>

如果'missingAttribute'不存在,是否会始终执行其他块?换句话说,缺少属性评估为false?

2 个答案:

答案 0 :(得分:0)

是的,它会评估为假。根据TLD中定义的属性类型类别,对属性值中指定的EL表达式进行不同的处理。在标记时的核心,它应该评估为布尔值。在核心输出标签到String等,

在你的场景中,你需要有c:选择包含c:when和c:否则的标签。

    <c:if test="${somecondition}">
        <c:choose>
            <c:when test="${missingAttribute}">
                ...do something
            </c:when>
            <c:otherwise>
                ...something else
            </c:otherwise>
        </c:choose> 
    </c:if>

c:否则仅在所有c:条件被评估为&#39; false&#39;时运行。

答案 1 :(得分:0)

如果missingAttribute是一个收集列表或在这种情况下设置的,则需要检查它是否为空或test =“ $ {not empty missingAttribute}”,否则,如果设置了该属性,则它将显示错误“对列表进行布尔测试” “。