Нужна помощь с использованием <c: forEach> в JSP / JSTL - PullRequest
4 голосов
/ 27 февраля 2012

Я пытаюсь перебрать 2d массив целых чисел и представить их в сетке с помощью тега <table>.Подвох в том, что мне не разрешено использовать любой java-скрипт.Я знаю, что это что-то вроде приведенного ниже кода, но более сложное.И boardArray возвращает двумерный целочисленный массив.Итак, как мне извлечь значение в каждой ячейке?Существует также предопределенный размер массива.

       <c:forEach var="array" items="${bean.boardArray}">
            <tr> 
                <td>${print out contents of a row}</td>
            </tr> 
        </c:forEach>

1 Ответ

10 голосов
/ 06 марта 2012

Вы не можете сделать это с простым HTML.Вы упомянули HTML в оригинальном заголовке вопроса, но поскольку вы прикрепили тег javabeans и упомянули тег c:forEach, я полагаю, вы имеете в виду JSP и JSTL вместо HTML.Здесь решение JSP + JSTL, отформатированное для лучшей читаемости.Код компонента:

package com;

public class TransferBean {
    private int[][] _boardArray = {
        { 1, 2, 33, 0, 7},
        { 13, 11, 7, 5, 3},
        { 5, 3, 2, 1, 1},
    };


    public int[][] getBoardArray() {
        return _boardArray;
    }

    public int getBoardArrayRowLength() {
        if (_boardArray == null || _boardArray.length == 0
                || _boardArray[0] == null) {
            return 0;
        }

        return _boardArray[0].length;
    }
}

Здесь содержимое файла JSP:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<jsp:useBean id="bean" class="com.TransferBean" />

<table>
    <thead>
        <tr>
        <c:forEach var="i" begin="1" end="${bean.boardArrayRowLength}">
            <th>Column ${i}</th>
        </c:forEach>
        </tr>
    </thead>
    <tbody>
        <c:forEach var="row" items="${bean.boardArray}">
        <tr>
            <c:forEach var="column" items="${row}">
                <td>
                    ${column}
                </td>
            </c:forEach>
        </tr>
        </c:forEach>
    </tbody>
</table>

Содержимое массива отображается двумя вложенными циклами c:forEach.Внешний цикл выполняет итерацию по строкам, и для каждой строки вложенный цикл выполняет итерацию по столбцам в данной строке.

Пример выше выглядит в браузере следующим образом:JSTL iteration over 2D array

...