web-dev-qa-db-ja.com

JSPでリストオブジェクトを反復処理する

私は自分で春とストラットを学ぼうとするプロジェクトに取り組んでいます。私は現在、JSPページで立ち往生しています。変数eidおよびenameとgetter/setterを含むpojoクラスがあります。また、sqlには、6つのデータが取り込まれた同じ値のテーブルがあります。
JdbcTemplateを介してデータベースにアクセスし、結果をリストに保存し、このリストをアクションページに渡して、request.setAttribute("empList",eList)として設定。私のjspページでは、その属性を呼び出し、JSTLを使用して繰り返し処理しようとします。
しかし、何も表示されません。式タグ<%=eList%>を使用してチェックしたため、リスト変数にデータが含まれていることがわかります。オブジェクトは次のように表示されます。

[[email protected], 
[email protected], 
[email protected], 
[email protected], 
[email protected], 
[email protected]]

Jstlに何か不足しているのではないかと思ったのですが、META-INF/libフォルダにjstl-1.2があります。また、configureパスファイルに追加しようとしましたが、まだ何もありません。また、正しいタグURLも持っています。
また、簡単な<c:out value="Hello"/>を実行するとき。こんにちは、印刷されます。したがって、これは私のjstlが適切に機能していると信じるようになりますが、jstlを使用してリストを反復処理しようとすると、何も表示されません。

とにかくここに私のJSPページがあります:

<%@ page language="Java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-   8859-1"%>
<%@taglib prefix="c" uri="http://Java.Sun.com/jsp/jstl/core" %>
<%@ page import="Java.util.List"%>
<!DOCTYPE html>
<% List eList = (List)session.getAttribute("empList");%>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Employee Details</title>
</head>
<body>
<c:out value="Hello"></c:out>
<h3>Employee Details</h3>
<hr size="4" color="gray"/>
<table>
<%=eList%>
    <c:forEach items="${eList}" var="employee">
        <tr>
            <td>Employee ID: <c:out value="${employee.eid}"/></td>
            <td>Employee Pass: <c:out value="${employee.ename}"/></td>  
        </tr>
    </c:forEach>
</table>
</body>
</html>

どんな助けも大歓迎です!

12
jjcode

SpringとStrutsを自習する前に、おそらくJavaを学ぶ必要があります。このような出力

_[email protected]
_

すべてのオブジェクトがJavaのすべてのクラスのスーパークラスであるObjectクラスから継承するObject#toString()メソッドの結果です。

Listサブクラスは、すべての要素を反復処理し、それらに対してtoString()を呼び出すことでこれを実装します。ただし、Employeeクラスにメソッドを実装(オーバーライド)していないようです。

あなたのJSTLはこちら

_<c:forEach items="${eList}" var="employee">
    <tr>
        <td>Employee ID: <c:out value="${employee.eid}"/></td>
        <td>Employee Pass: <c:out value="${employee.ename}"/></td>  
    </tr>
</c:forEach>
_

eListという名前のページ、リクエスト、セッション、またはアプリケーションスコープ属性がないという事実を除き、問題ありません。

追加する必要があります

_<% List eList = (List)session.getAttribute("empList");
   request.setAttribute("eList", eList);
%>
_

または、empListで属性forEachを使用します。

_<c:forEach items="${empList}" var="employee">
    <tr>
        <td>Employee ID: <c:out value="${employee.eid}"/></td>
        <td>Employee Pass: <c:out value="${employee.ename}"/></td>  
    </tr>
</c:forEach>
_
26

empListタグでforEachを直接読み取ることができます。これを試してください

 <table>
       <c:forEach items="${sessionScope.empList}" var="employee">
            <tr>
                <td>Employee ID: <c:out value="${employee.eid}"/></td>
                <td>Employee Pass: <c:out value="${employee.ename}"/></td>  
            </tr>
        </c:forEach>
    </table>
3
Prabhaker

コードを次のように変更します

<%! List eList = (ArrayList)session.getAttribute("empList");%>
....
<table>
    <%
    for(int i=0; i<eList.length;i++){%>
        <tr>
            <td><%= ((Employee)eList[i]).getEid() %></td>
            <td><%= ((Employee)eList[i]).getEname() %></td>  
        </tr>
      <%}%>
</table>
2
Alaa Abuzaghleh
 <c:forEach items="${sessionScope.empL}" var="emp">
            <tr>
                <td>Employee ID: <c:out value="${emp.eid}"/></td>
                <td>Employee Pass: <c:out value="${emp.ename}"/></td>  
            </tr>
        </c:forEach>
0
Savan Makone