我正在尝试使用JSP页面开发Spring MVC应用程序,但我遇到了一个问题。它更像是一个创造性问题,而不是一个代码问题,但这里有:
因此,应用程序基本上收到了一个配方(字段名称,问题描述,问题解决方案等),并在创建时对其进行了一次ID。
我想要的是在首页上显示最后 3个食谱。我想出了一个代码,显示了第一个 3个创建的食谱:
<c:forEach var="recipe" items='${recipes}'>
<c:if test="${recipe.id < 4}
<div class="span4">
<h3<c:out value="${recipe.inputDescProb}"></c:out></h3>
<p><c:out value="${recipe.inputDescSol}"></c:out></p>
<p><a class="btn" href="/recipes/${recipe.id}">Details »</a></p>
</div>
</c:if>
</c:forEach>
有关如何显示最后 3食谱的任何想法吗?
答案 0 :(得分:5)
使用fn:length()
EL功能计算配方总数。在我们使用任何EL function
之前,我们还需要导入必要的tag library
。
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
然后我们使用<c:set>
将总数设置为页面范围的属性。
<c:set var="totalRecipes" value="${fn:length(recipes)}" />
<c:forEach>
允许您使用其varStatus
属性获取循环计数器。计数器的范围是循环的本地范围,它会自动递增。此loop counter
从1开始计算。
<c:forEach var="recipe" items='${recipes}' varStatus="recipeCounter">
<c:if test="${recipeCounter.count > (totalRecipes - 3)}">
<div class="span4">
<h3<c:out value="${recipe.inputDescProb}"></c:out></h3>
<p><c:out value="${recipe.inputDescSol}"></c:out></p>
<p><a class="btn" href="/recipes/${recipe.id}">Details »</a></p>
</div>
</c:if>
</c:forEach>
编辑:使用count
类的LoopTagStatus
属性访问EL中迭代计数器的当前值${varStatusVar.count}
。
答案 1 :(得分:5)
无需检查长度,只需使用.last
变量的varStatus
属性。
<c:forEach var="recipe" items="${recipes}" varStatus="status">
<c:if test="${not status.last}">
Last Item
</c:if>
<c:forEach>
旁注,您还可以获得.first
和.count
答案 2 :(得分:1)
您可以使用${fn:length(recipes)}
将当前计数与总收藏大小进行比较:
<c:set var="total" value="${fn:length(recipes)}"/>
<c:forEach var="recipe" items='${recipes}' varStatus="status">
<c:if test="${status.count > total - 3}">
<div class="span4">
<h3<c:out value="${recipe.inputDescProb}"></c:out></h3>
<p><c:out value="${recipe.inputDescSol}"></c:out></p>
<p><a class="btn" href="/recipes/${recipe.id}">Details »</a></p>
</div>
</c:if>
</c:forEach>
编辑:
您需要先导入fn
才能使JSTL fn
可供使用:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>