logic:iterateの使い方

1729 ワード

例:
<logic:iterate id="hotelOrderDetail" collection="${order.hotelOrderDetails}" indexId="index" length="1">
<bean:write name="hotelOrderDetail" property="orderTime" format="yyyy-MM-dd HH:mm" />
</logic:iterate>

collectionは集合を表す.例えば:List.
nameはrequestを表す.setXXの集合.
間違った書き方を例に挙げて説明します.
アクション:
request.setAttribute("orders",order.getXXXList());
ページ:
間違いの書き方1:
name="order.hotelOrderDetails"

エラーの原因:
Cannot find bean: "order.hotelOrderDetails" in any scope

間違いの書き方2:
name="${order.hotelOrderDetails}"

エラーの原因:
javax.servlet.jsp.JspException: Cannot find bean: "[com.iteye.entity.HotelOrderDetail@8c167495, com.iteye.unicom.entity.HotelOrderDetail@fcd70622]" in any scope

正しい書き方:
name="orders"

setAttributeのkeyに対応する必要があります.
lengthはサイクル数を表す.
logic:equalと組み合わせて使用
<logic:iterate id="hotelOrderDetail" collection="${order.hotelOrderDetails}" indexId="index">
<logic:equal name="index" value="0">
<html:button property="" value=" " styleId="addRoom"/>
</logic:equal>
</logic:iterate>

上のlogic:equalは、indexが0に等しい場合にhtml:buttonを表示します.indexはlogic:iterateのインデックス番号です
nameの値を${index}と書かないでください.これは間違っています.
strutsラベルのname属性は対応するrequestである.setAttribute(key,value)のkey.