Условное отображение с выражениями OGNl - PullRequest
0 голосов
/ 07 февраля 2012

В моем проекте Struts у меня есть набор записей в списке массивов, эти записи имеют свое имя и categoryid.и во втором массиве у меня есть записи для категории (category_id, categoryname).

Теперь я хочу перечислить первый список с именем категории в виде подзаголовков, таких как

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>

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

Ответы [ 2 ]

0 голосов
/ 08 февраля 2012

Я обновил свои коды до

<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 голосов
/ 07 февраля 2012

Вы можете сделать это, посчитав количество nameDetail, которое связано с категорией.Если категория не имеет никакого отношения к nameDetail, она не будет печатать свое имя.

Если у вас есть метод, который возвращает nameDetails по 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>
...