2

次のようにテーブルを動的に表示する必要があります。

3 つの名前がある場合:

╔══════╗
║      ║
║ Jack ║
║ Jill ║
║ John ║
╚══════╝

ただし、3 つ以上の名前がある場合:

╔════════╦══════╦═══════╗
║        ║       ║       ║
║ Jack   ║ Jill  ║ Jabar ║
║ John   ║ Joe   ║ Jabio ║
║ Jordan ║ Juan  ║       ║
╚════════╩══════╩═══════╝

行は 3 を超えてはなりませんが、列の数は動的に増加します。

それを行う最善の方法は何ですか?名前は名前のリストとして JSP に送られます。現在、JSTL を使用<c:for each..してテーブルを表示しています。


NBテーブル作成ツール

4

1 に答える 1

1

基本的な算術論理を適用する必要があります。次の実装を確認してください。

JSTLの経験が不足しているため、JSPスクリプトレットを使用する必要がありました。


コントローラでのサンプル入力の作成

// number of students
final int numStudents = 17;
String array[] = new String[s];
for (int i = 0; i < numStudents; i++) {
    array[i] = "Student " + (i + 1);
}

List<String> students = Arrays.asList(array);


ビュー内のテーブル作成コード

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

<!DOCTYPE HTML>
<html>
<head>
</head>
<body>
    <c:if test="${not empty students}">
        <c:set var="numStudents" value="${fn:length(students)}" />

        <%-- Variable initialization, arithmetic operations --%>
        <%
            int numStds = Integer.valueOf("" + pageContext.getAttribute("numStudents"));

            int numStdCol1, numStdCol2, numStdCol3;
            numStdCol1 = numStdCol2 = numStdCol3 = numStds / 3;
            if (numStds % 3 == 1) {
                numStdCol1 ++;          
            } else if (numStds % 3 == 2) {
                numStdCol1 ++;
                numStdCol2 ++;
            }

            pageContext.setAttribute("numCol1", numStdCol1);
            pageContext.setAttribute("numCol2", numStdCol2);
            pageContext.setAttribute("numCol3", numStdCol3);
        %>

        <%-- Table creation --%>
        <table border="1" cellspacing="0" cellpadding="0">
            <tr>
                <c:forEach var="student" begin="0" end="${numCol1 - 1}" items="${students}">
                    <td>${student}</td>                 
                </c:forEach>
            </tr>
            <tr>
                <c:forEach var="student" begin="${numCol1}" end="${numCol1 + numCol2 - 1}" items="${students}">
                    <td>${student}</td> 
                </c:forEach>
            </tr>
                <c:forEach var="student" begin="${numCol1 + numCol2}" end="${numStudents - 1}" items="${students}">
                    <td>${student}</td>     
                </c:forEach>
            </tr>
        </table>
    </c:if>
</body>
</html>


サンプル入力の出力

<table border="1" cellspacing="0" cellpadding="0">
    <tr>
            <td>Student 1</td>                  
            <td>Student 2</td>                  
            <td>Student 3</td>                  
            <td>Student 4</td>                  
            <td>Student 5</td>                  
            <td>Student 6</td>                  
    </tr>
    <tr>
            <td>Student 7</td>  
            <td>Student 8</td>  
            <td>Student 9</td>  
            <td>Student 10</td> 
            <td>Student 11</td> 
            <td>Student 12</td> 
    </tr>
            <td>Student 13</td>     
            <td>Student 14</td>     
            <td>Student 15</td>     
            <td>Student 16</td>     
            <td>Student 17</td>     
    </tr>
</table>
于 2012-09-08T20:09:31.017 に答える