日期正在打印但未能在jstl中评估为非空

时间:2014-11-20 10:45:24

标签: java spring hibernate jsp jstl

我正在使用JSTL在JSP中迭代Spring模型值。 我使用JSTL在JSP中显示两个日期。

以下是我的Java代码:

model.put("oldest",timesheetService.getOldestPendingTimesheet(userDetails));
model.put("pending", timesheetService.getNextOldestPendingTimesheet(userDetails));

JSP代码:

<c:choose>
    <c:when test="${not empty model.oldest}">
        <c:out value="${model.oldest}"/>
    </c:when>
    <c:when test="${not empty model.pending}">
        <c:out value="${model.pending}"/>
    </c:when>       
</c:choose>

我在c:choose打印外显示两个日期,如下所示

oldest:Tue Nov 04 00:00:00 IST 2014 
Pending:Sun Nov 09 00:00:00 IST 2014

最早的日期在c:when内打印,但待审核仅在c:choose之外打印,而不是在c:when内打印。

上述代码有什么问题?

3 个答案:

答案 0 :(得分:1)

这是因为当<c:when>中有多个<c:choose>时,第一个被解释为if,其他所有被解释为else if。因此,您的第一个条件得到满足,第二个when被忽略。

如果要根据非独占条件打印它们,请更好地使用<c:if>。当条件很少时,它比<c:choose>构造更容易阅读。

<c:if test="${not empty model.oldest}">
    <c:out value="${model.oldest}"/>
</c:if>
<c:if test="${not empty model.pending}">
    <c:out value="${model.pending}"/>
</c:if>

答案 1 :(得分:1)

<c:choose>的工作方式类似于Java switch语句。它允许您在多个备选方案之间选择。如果switch语句包含case个语句,则<c:choose>标记包含<c:when>个标记。因此,如果<c:when>中的某个满足条件,那么其他<c:when>将无法执行,就像您在break阻止后放置case条件一样。如果要打印任一属性,则应使用<c:choose>。如果你想打印它们,那么你最好用<c:if>来测试空虚。如果您仍想使用<c:choose>,则需要在单独的标记中执行此操作。另外,要格式化日期,请使用<fmt:formatDate>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

<c:choose>
    <c:when test="${not empty model.oldest}">
         <fmt:formatDate type="both" 
            dateStyle="long" timeStyle="long" 
            value="${model.oldest}" />        
    </c:when>
</c:choose> 
<c:choose>
    <c:when test="${not empty model.pending}">
         <fmt:formatDate type="both" 
            dateStyle="long" timeStyle="long" 
            value="${model.pending}" />
    </c:when>       
</c:choose> 

答案 2 :(得分:0)

另一种选择可以是 -

<c:choose>
    <c:when test="${not empty model.oldest}">
        <c:out value="${model.oldest}"/>
    </c:when>
    <c:otherwise>
        <c:when test="${not empty model.pending}">
            <c:out value="${model.pending}"/>
        </c:when>
    </c:otherwise>
</c:choose>