我遇到了一些麻烦...
我有这样的代码:
Market market = new market();
List<Market > list = marketService.getMarketItemList(market);
model.addAttribute("list", list);
我有一张这样的表:
type | item_name
fruit | Banana
fruit | Apple
vegetable | Onion
我在JSP中为每个编写了一个,如下所示:
<c:forEach var="cmenu" items="${list}">
<li><a href="${url_itemmarket}/${cmenu.itemName}">${cmenu.description}/a>/li>
</c:forEach>
在JSP中,我希望它看起来像这样:
type | Item Name
Fruit | Banana
| Apple
Vegetable | Onion
我不想在jsp视图中重复 fruit 。
有人可以帮助我得到一个例子或一些参考资料吗?
谢谢!
答案 0 :(得分:1)
如果您无法创建地图,那么如果需要使用列表,则可以检查以前的值。
您可以创建一个包含先前值的变量并进行检查:
lanczos3
或者,您可以通过<c:set var="types" value="${['fruit','fruit','vegetable']}"/>
<c:forEach items="${types}" var="type">
${type eq previousType ? '-same-' : type}<br/>
<c:set var="previousType" value="${type}"/>
</c:forEach>
属性使用索引:
varStatus
在这里您还可以使用<c:set var="types" value="${['fruit','fruit','vegetable']}"/>
<c:forEach items="${types}" var="type" varStatus="status">
${status.index gt 0 and types[status.index - 1] eq types[status.index] ? '-same-' : type}<br/>
</c:forEach>
代替not status.first
。
两者都会输出:
status.index gt 0
答案 1 :(得分:0)
1
HTML中有一些错误:
<li><a href="${url_itemmarket}/${cmenu.itemName}">${cmenu.description}/a>/li>
^ ^
| |
two errors here (mising < characters) --------------------------------
replace with this -----------------------------------------------------
| |
v v
<li><a href="${url_itemmarket}/${cmenu.itemName}">${cmenu.description}</a></li>
2
您应该使用Map。
地图的键应该是不同的类型。
值应为食物对象的列表。
然后,您可以在JSP中迭代映射的键。
您需要一个嵌套循环来迭代每个列表中的食物。
我认为您的JSP / JSTL看起来像这样,但它未经测试:
<table>
<tr><th>type</th><th>Item Name</th></tr>
<!-- iterate over each key in the map -->
<c:forEach var="foodMapEntry" items="${foodMap}">
<tr>
<td>${foodMapEntry.key}</td>
<td>
<!-- iterate over each item in the list of foods -->
<c:forEach var="food" items="${foodMapEntry.value}">
| ${food.name}<br/>
</c:forEach>
</td>
</tr>
</c:forEach>
</table>
以下是一些代码,展示了如何构建上面使用的地图:
/* create a list of food */
List<Food> foodList = new ArrayList<Food>();
/* add some fruits to the list */
foodList.add(new Food("Banana", "fruit"));
foodList.add(new Food("Apple", "fruit"));
/* add some veggies to the list */
foodList.add(new Food("Onion", "vegetable"));
foodList.add(new Food("Mushroom", "vegetable"));
/* add some candy to the list */
foodList.add(new Food("Chocolate", "candy"));
foodList.add(new Food("Gummy Bears", "candy"));
/* create a Map that maps food types to lists of Food objects */
Map<String, List<Food>> foodMap = new HashMap<String, List<Food>>();
/* populate the map */
for (Food f : foodList) {
String foodType = f.getType();
if (foodMap.containsKey(foodType)) {
foodMap.get(foodType).add(f);
}
else {
List<Food> tempList = new ArrayList<Food>();
tempList.add(f);
foodMap.put(foodType, tempList);
}
}
一个简单的食物类:
class Food {
private String name;
private String type;
public Food(String n, String t) {
name = n;
type = t;
}
public String getName() { return name; }
public String getType() { return type; }
}
这是关于将地图与JSP和JSTL一起使用的question/answer。
答案 2 :(得分:0)
存储您的数据:
Map<String, List<String>> data = new HashMap<String, List<String>>();