2012-02-07 3 views
0

В моем проекте struts у меня есть набор записей в списке массивов, эти записи имеют свое имя и категорию. и во втором arraylist у меня есть записи для категории (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 

Примечание: Здесь я не хочу, чтобы отобразить имена категорий, у которых нет записей, связанных с этим. для этого i закодировано ниже.

<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> 

это отображение категории тех не имеют записей asssociated с теми also.can кто-нибудь сказать, как управлять отображением категории имени. или есть ли другие альтернативы для этого.

ответ

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, относящийся к категории. Если в категории нет имени, связанного с именем, он не собирается печатать свое имя.

Если у вас есть метод, который возвращает имяDetails by categoryId, вы можете сделать это без каких-либо подсчетов. Я не знаю, есть ли лучшее решение для вашего дела.

<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

Смежные вопросы