使用每个表行的JSTL显示Java列表内容

时间:2014-04-16 14:43:54

标签: java html jstl

我在使用java jstl在html表中显示数据时遇到问题。我希望以前有人这样做,可以提供指导或示例。

这是表(行,数据)当前显示的方式:

Apple, Orange, Mange
100, 101, 102
200, 201, 202
300, 301, 302

但这就是我实际需要它来显示的方式

Apple, 100, 200, 300
Orange, 101, 201, 301
Mango, 102, 202, 302   

这是我目前的JSTL显示代码

<c:forEach items="${dataSetList}" var="currentDataSetObj">
    <tr>
     <c:forEach items="${currentDataSetObj.myList}" var="currentValueOfDataElement" varStatus="loopCount" >
          <td>  <c:out value="${currentValueOfDataElement}" />  </td>
     </c:forEach>
     </tr>
</c:forEach>

这是服务器代码

public class DataSet {
    List<String> myList = new ArrayList<String>();
    // more stuff not relevant to question here
}

List<DataSet> dataSetList = new ArrayList<DataSet>();
DataSet dataSetOne   = new DataSet();
DataSet dataSetTwo   = new DataSet();
DataSet dataSetThree = new DataSet();
DataSet dataSetFour  = new DataSet();

List<String> fruitA = new ArrayList<String>();
List<String> priceA = new ArrayList<String>();
List<String> priceB = new ArrayList<String>();
List<String> priceC = new ArrayList<String>();

fruitA.add("Apple");
fruitA.add("Orange");
fruitA.add("Mango");
priceA.add("100");
priceA.add("101");
priceA.add("102");
priceB.add("200");
priceB.add("201");
priceB.add("202");
priceC.add("300");
priceC.add("301");
priceC.add("302");

dataSetOne.setMyList(fruitA);
dataSetTwo.setMyList(priceA);
dataSetThree.setMyList(priceB);
dataSetFour.setMyList(priceC);

dataSetList.add(dataSetOne);
dataSetList.add(dataSetTwo);
dataSetList.add(dataSetThree);
dataSetList.add(dataSetFour);

request.setAttribute("dataSetList", dataSetList);

2 个答案:

答案 0 :(得分:2)

最简单的方法是更改​​dataSet中的值顺序。

例如:

fruitA.add("Apple");
fruitA.add("100");
fruitA.add("200");
fruitA.add("300");

答案 1 :(得分:2)

@ZaoTaoBao有answered你的问题,

<小时/> 除了你的问题:

使您的服务器代码变得简单,遵循Java中的 OO 设计。

而不是创建许多List's,创建一个类来保存水果信息,如:

public class Fruit {
    private String name;
    private double[] prices;        
        //getters, setters & constructor 
}

然后创建一个List对象来保存Fruit's,如:

List<Fruit> fruitList = new ArrayList<Fruit>();

Fruit appleFruit = new Fruit("Apple", new double[]{100.0, 200.0, 300.0});
Fruit orangeFruit = new Fruit("Orange",new double[]{101.0, 201.0, 301.0});
Fruit mangoFruit = new Fruit("Mango",new double[]{102.0, 202.0, 302.0});

fruitList.add(appleFruit);
fruitList.add(orangeFruit);
fruitList.add(mangoFruit);

request.setAttribute("fruitList", fruitList);

使用单<c:forEach..

在jsp中渲染Fruits
<c:forEach items="${fruitList}" var="currentFruit">
    <tr>      
       <td> 
        <c:out value="${currentFruit.name}" />        
       </td>       
        <c:forEach items="${currentFruit.prices}" var="price">
            <td>
                ${price}
            </td>
        </c:forEach>       
    </tr>
</c:forEach>
</table>

另见Object Oriented Design