在我的struts项目中,我在数组列表中有一组记录,这些记录有其名称和categoryid。在第二个arraylist中我有类别(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>
它显示那些没有与那些相关的记录的类别。任何人都可以告诉如何控制类别名称的显示。 还是有其他更好的选择。
答案 0 :(得分:0)
您可以通过计算与类别相关的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>
答案 1 :(得分: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>
现在我得到了理想的输出。但解决方案是最好的吗?