7

私は次のコードを持っています:

<s:iterator value="reviews">

    <img src="<s:property value="#request.restaurant.portalImage.url"  />" />

    <s:property value="user.firstName" />
    <s:property value="user.lastName" />
    <s:property value="rating" />
    <s:property value="review" />

</s:iterator>

reviews は、評価やユーザー名などのレビューの詳細を含むレビュー オブジェクトのリストです。

私の問題は、ループ内の ValueStack に存在するオブジェクトにアクセスできないことです。

ループの外側は<s:property value="#request.restaurant.portalImage.url" />正しく動作します。ただし、ループ内では null が出力されます。

私の知る限り、反復子はそのコレクションを ValueStack にプッシュして、すべての OGNL 式がそれに対して解決されるようにします。しかし、# を使用しました。これは、解決のためにルート オブジェクトを明示的に指定していることを意味します。

なぜまだ機能していないのですか?

4

4 に答える 4

2

私はちょうど午後を同じような問題と戦うのに費やしました。私の場合、問題は、私のイテレータ変数(あなたの場合reviews)が外部変数と同じ名前のフィールドを持っていることでした。

イテレータのローカルスタックから抜け出そうとしても、外部変数にアクセスできませんでした。

レビューイテレータにrestaurantというフィールドがある場合、どんなに頑張っても、外側のrestaurant変数をオーバーライドします:(

私が見つけた解決策は、単に外部変数の名前を変更することでした。(例:theRestaurant

名前を変更すると、内部変数との衝突がなくなり、イテレータ内からアクセスできるようになりました。

于 2012-07-03T22:27:20.803 に答える
1

イテレータで使用しているコレクションにどのオブジェクトが含まれているかわかりません。イテレータに従って、S2イテレータタグを使用してコレクションを反復すると、オブジェクトが値スタックの一番上にプッシュされます。次のように反復しているユーザーオブジェクトのコレクション

<s:iterator value="userCollection">

</s:iterator>

したがって、これが繰り返されると、S2イテレータはuserオブジェクトを値スタックの一番上にプッシュします。オブジェクトのnameプロパティを参照userする場合は、nameプロパティを参照する必要があります。

<s:property name="userName"/>

OGNLは値スタックで解決しようとuserNameし、値スタックの最上位オブジェクトとしてユーザーオブジェクトが既に存在するため、Iteratorタグのドキュメントと、値をプッシュする方法を確認することをお勧めします。

于 2012-04-12T11:35:49.120 に答える
1

以下のように変更する必要があります。

 <s:iterator value="reviews" var="varrequest">

   <img src="<s:property value="#varrequest.restaurant.portalImage.url"  />" />

   <s:property value="#varrequest.user.firstName" />
   <s:property value="#varrequest.user.lastName" />
   <s:property value="#varrequest.rating" />
   <s:property value="#varrequest.review" />

 </s:iterator>

イテレータ参照変数を使用して一意のインデックス オブジェクトを取得します。

于 2012-04-12T11:24:48.700 に答える
0

私はそれがあなたの問題を解決すると思います

s:iterator value="reviews" status="position">
   <img src="<s:property value="#request.restaurant.portalImage.url"/>"/>
   <s:property value="#position.user.firstName"/>
   <s:property value="#position.user.lastName"/>
   <s:property value="#position.rating"/>
   <s:property value="#position.review"/>
 </s:iterator>

あなたの要件は少し混乱しています

于 2012-04-12T12:57:56.723 に答える