我正在使用JSTL从bean类中获取值。 从bean类获取的值将是 java.util.Map 。通过以下代码成功获取值:
<c:forEach items="${bean.map}" var="item">
<c:out value="${item.key}"/> = <c:out value="${item.value}"/><br/>
</c:forEach>
获取键值对后,我需要创建一个包含4行和7列的表。 地图:
map.put(2, true);
map.put(18, true);
地图中的关键字为1-28,值为TRUE或FALSE。
如果键为2且值为TRUE,则无需在表的(1,2)中放置复选标记,即:第1行第2列。
同样,如果密钥是18,则需要在表格的(3,4)中放置一个复选标记。
<table border="1" width="100%">
<tr>
<th>1</th>
<th>2</th>
<th>3</th>
<th>4</th>
<th>5</th>
<th>6</th>
<th>7</th>
</tr>
<c:forEach items="${bean.map}" var="item" >
<tr>
<td><c:out value="${item.value}"/></td>
</tr>
</c:forEach>
</table>
我不知道如何继续前进,因为我被限制只使用JSTL并且是JSTL的新手。不允许使用javascript或jquery,这让生活变得轻松。
请给我一些建议继续进行。任何帮助都会很明显。
答案 0 :(得分:0)
使用Java代码将您的条目拆分为行,而不是希望在视图中使用JSTL。这是可能的,但是用Java做一切会更容易。
使用地图包含从1到28的键有点奇怪。为什么不使用28布尔值列表?
/**
* Returns a list of 4 lists of booleans (assuming the map contains 28 entries going
* from 1 to 28). Each of the 4 lists contaisn 7 booleans.
*/
public List<List<Boolean>> partition(Map<Integer, Boolean> map) {
List<List<Boolean>> result = new ArrayList<List<Boolean>>(4);
List<Boolean> currentList = null;
for (int i = 1; i <= 28; i++) {
if ((i - 1) % 7 == 0) {
currentList = new ArrayList<Boolean>(7);
result.add(currentList);
}
currentList.add(map.get(i));
}
return result;
}
在你的JSP中:
<table border="1" width="100%">
<tr>
<th>1</th>
<th>2</th>
<th>3</th>
<th>4</th>
<th>5</th>
<th>6</th>
<th>7</th>
</tr>
<c:forEach items="${rows}" var="row">
<tr>
<c:forEach items="row" var="value">
<td><c:out value="${value}"/></td>
</c:forEach>
</tr>
</c:forEach>
</table>