2012-02-07 80 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