私は自分で春とストラットを学ぼうとするプロジェクトに取り組んでいます。私は現在、JSPページで立ち往生しています。変数eidおよびenameとgetter/setterを含むpojoクラスがあります。また、sqlには、6つのデータが取り込まれた同じ値のテーブルがあります。JdbcTemplate
を介してデータベースにアクセスし、結果をリストに保存し、このリストをアクションページに渡して、request.setAttribute("empList",eList)
として設定。私のjspページでは、その属性を呼び出し、JSTL
を使用して繰り返し処理しようとします。
しかし、何も表示されません。式タグ<%=eList%>
を使用してチェックしたため、リスト変数にデータが含まれていることがわかります。オブジェクトは次のように表示されます。
[org.classes.database.Employee@d9b02,
org.classes.database.Employee@13bce7e,
org.classes.database.Employee@171cc79,
org.classes.database.Employee@272a02,
org.classes.database.Employee@137105d,
org.classes.database.Employee@1359ad]
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>
どんな助けも大歓迎です!
SpringとStrutsを自習する前に、おそらくJavaを学ぶ必要があります。このような出力
_org.classes.database.Employee@d9b02
_
すべてのオブジェクトが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>
_
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>
コードを次のように変更します
<%! 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>
<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>