2012-02-07 82 views
0

在我的struts項目中,我有一組數據列表中的記錄,這些記錄器有其名稱和分類標識。在第二陣列列表中,我有類別(category_id,categoryname)的記錄。帶OGNl表達式的條件顯示

現在我想列出與類別名稱的第一個列表,副標題像

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 

我需要這些顯示爲

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

注:在這裏,我不想顯示沒有相關記錄的類別名稱。爲此,我編碼如下。

<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 2012-02-08 10:38:06

0

您可以通過計算與類別相關的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

不知道這些是否是拼寫錯誤,但這些''標籤沒有關閉,這會導致問題。 – 2012-02-07 16:32:50

+0

謝謝,我在stackoverflow上鍵入它們,忘記關閉這些 – batbaatar 2012-02-08 00:55:21

+0

@batbaatar 3迭代器,如果條件對我來說看起來太小了,就忘記3! – gnanz 2012-02-08 10:10:01