c:forEach在上一行中已经存在时不要重复相同的值

我对此有点麻烦…

我有这样的代码:

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

我不想 *

有人可以帮我得到一个例子或一些参考吗?

谢谢!

回答:

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);

}

}

还有一个简单的Food类:

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; }

}

以上是 c:forEach在上一行中已经存在时不要重复相同的值 的全部内容, 来源链接: utcz.com/qa/407146.html

回到顶部