Action.javaの中で、次のようなコードを使っています。
request.setAttribute("TAREWEIGHT", tareWeightList);
request.setAttribute("BARCODE", barcodeList);
return (mapping.findForward(target));
tareWeightList & barcodeList は、実際にはほとんど値を保持していません。 リストの値を属性に設定した後、javaファイルはその内容をJSPファイルに転送します。
JSPファイルでは、以下の行を使ってコンテンツを取得することができます。
<%=request.getAttribute("TAREWEIGHT")%>
<%=request.getAttribute("BARCODE") %>
私の要件は、そのリストのコンテンツが表形式で表示されることです。
最初の列にはバーコードの値、2番目の列にはそれに対応する風袋の値。
コンテンツが表形式で表示されるように、JSPファイルにコードを書くためのアイデアを提案してください。
HTMLで表を表現するには、HTMLの <table>
要素を使用します。JSPでリストを反復処理するには、JSTL <c:forEach>
を使ってください。
例
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
...
<table>
<c:forEach items="${list}" var="item">
<tr>
<td><c:out value="${item}" /></td>
</tr>
</c:forEach>
</table>
あなたは、コードに設計上の欠陥があるだけです。あなたは、関連するデータを2つの独立したリストに分割しています。これでは、最終的なアプローチは
<table>
<c:forEach items="${TAREWEIGHT}" var="tareWeight" varStatus="loop">
<c:set var="barCode" value="${BARCODE[loop.index]}" />
<tr>
<td><c:out value="${tareWeight}" /></td>
<td><c:out value="${barCode}" /></td>
</tr>
</c:forEach>
</table>
関連するデータをまとめるために、カスタムクラスを作成することをお勧めします。例
public class Product {
private BigDecimal tareWeight;
private String barCode;
// Add/autogenerate getters/setters/equals/hashcode and other boilerplate.
}
のように、最終的に以下のように表現できる List<Product>
ができるようにします。
<table>
<c:forEach items="${products}" var="product">
<tr>
<td><c:out value="${product.tareWeight}" /></td>
<td><c:out value="${product.barCode}" /></td>
</tr>
</c:forEach>
</table>
のようにリクエストスコープに入れた後、以下のようにします。
request.setAttribute("products", products);
c:forEach>と