2012-02-07 3 views
0

내 struts 프로젝트에 배열 목록에 레코드 집합이 있습니다.이 레코드의 이름과 범주 ID는 같습니다. 두 번째 arraylist에는 category (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

category와 관련된 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 iterators 그리고 3 조건이 나에게 너무 많이 보이는 경우 3! – gnanz

관련 문제