2012-02-07 4 views
0

私のstrutsプロジェクトでは、配列リストにレコードセットがあります。これらのrecorは、名前とカテゴリIDを持っています。 2番目のarraylistにはカテゴリ(category_id、categoryname)のレコードがあります。OGNl式による条件付き表示

は、今私は、これらが

Category-1 
    --name1 
    --name3 
Category-2 
    --name2 
Category-5 
    --name3 

ノートとして表示する必要が

ArrayList1:(nameDetailList) 
NAME:    CATEGORYID 
name1     1 
name2     2 
name3     1 
name4     5 

ArrayList2:(categoryList) 
CategoryID   CategoryName 
1      Category-1 
2      Category-2 
3      Category-3 
4      Category-4 
5      Category-5 

よう小見出しなどのカテゴリ名の最初のリストを一覧表示したい:ここで私が表示しませんレコードに関連付けられていないカテゴリ名。これは以下のコードです。

<s:iterator id="catIter" value="categoryList"> 
     <s:property value="categoryName"/> 
    <s:iterator value="nameDetailList.{ ?this.categoryId==#catIter.categoryId}"> 
<s:property value="Name"/> 
</s:iterator> 
</s:iterator> 

カテゴリが表示されていても、これらのカテゴリに関連付けられているレコードはありません。カテゴリ名の表示を制御する方法を誰にも教えてください。 またはこれに代わる他の方法があります。

答えて

0

私は今、私は所望の出力を得ている

<s:iterator id="catIter" value="categoryList" status="catstatu">  
    <s:iterator value="nameDetailList.{ ?this.categoryId==#catIter.categoryId}"> 
    <s:if test="#catstatus.first==true"> 
      <s:property value="categoryName"/> 
    </s:if> 
    <s:property value="Name"/> 
    </s:iterator> 
</s:iterator> 

に自分のコードを更新しました。しかし解決策は最高のものですか?

+0

時間の複雑さの点ではO(mn)です。より良い解決策はありません – batbaatar

0

カテゴリに関連するnameDetailの数を数えることでこれを行うことができます。カテゴリに関連するnameDetailがない場合、その名前は印刷されません。

categoryIdでnameDetailsを返すメソッドがある場合は、何もカウントせずに行うことができます。私はあなたの場合のためのより良い解決策があるかどうかわかりません。

<s:iterator value="categoryList" var="category"> 
    <s:set name="counter" value="0"/> 

    <s:iterator value="nameDetailList" var="nameDetail"> 
     <s:if test="#category.categoryId == #nameDetail.categoryId"> 
      <s:set name="counter" value ="%{#counter + 1}"/> 
     </s:if> 
    </s:iterator> 

    <s:if test="#counter > 0"> 
    <s:property value="#category.categoryName"/> 

    <s:iterator value="nameDetailList" var="nameDetail"> 
     <s:if test="#category.categoryId == #nameDetail.categoryId"> 
      <s:property value="#nameDetail.name"/> 
     </s:if>  
    </s:iterator> 

    </s:if> 


</s:iterator> 
+0

これらはタイプミスであるかどうかは分かりませんが、「」タグは閉じられていないため、問題が発生します。 –

+0

ありがとう、私はstackoverflowでそれらを入力し、それらを閉じるのを忘れていた – batbaatar

+0

@ batbaatar 3イテレータと3条件が私にあまりにも多く見えます! – gnanz

関連する問題