ExtraFunction extra = null;
List<ExtraFunction> extraList = new ArrayList<ExtraFunction>();
for(Group group : groupList){
extra = extraService.getExtraFunctionByGroupId(group.getGroupId());
extraList.add(extra);
}
request.setAttribute("extraList", extraList);
...
<c:forEach var="group" items="${groupList}" varStatus="st">
<c:forEach var="extra" items="${extraList}" varStatus="st1">
<c:if test="${st.index==st1.index}">
...//只有当两个list的下标都一样的时候,再去循环。
</c:if>
</c:forEach>
</c:forEach>
上面这种做法很大程度上会出问题,所以我又改了思路,既然两个list要同时取值,可不可以这样来做:新建一个List,其中放入数组,数组第一个放group,第二个放extraFunction,代码如下:
ExtraFunction extra = null;
List<Object[]> groupDetails = new ArrayList<Object[]>();
for(Group group : groupList){
Object[] unitArray = new Object[2];
unitArray[0] = group;
unitArray[1] = extraService.getExtraFunctionByGroupId(group.getGroupId());
groupDetails.add(unitArray);
}
request.setAttribute("groupDetails", groupDetails);
...
<c:forEach var="group" items="${groupDetails}" varStatus="st">
<c:if test="${group[1].isPublic == 1 && group[0].status == 1}"><c:if>
...
这样,基本解决了需求问题,之前我还尝试过用map来解决,但是没整好,extraMap(key,value),其中key放的是group的index,而value放的是extraFunction对象,这样在循环的时候
<c:forEach var="group" items="${groupList}" varStatus="st">
...
<a href="<c:if test="${extraMap[st.index].isPublic == 1 && group.status == 1}">
...
但是isPublic的值取不出来,有大拿能给我解惑么?
6 个解决方案
#1
放object[]里取值会靠谱点,
话说你这个查询数据库怎么能放循环里面呢,这得循环多少次啊
unitArray[1] = extraService.getExtraFunctionByGroupId(group.getGroupId());
话说你这个查询数据库怎么能放循环里面呢,这得循环多少次啊
#2
传了groupId,循环多少次与groupList大小相当
#3
确保list有值后:
jsp任何值也没获取到,检查c:forEach,c:if取值方式,好久没用c标签了
group[1].isPublic觉得jsp应该是不支持objcet.属性的,在java怎么都有个类型转换这事
jsp任何值也没获取到,检查c:forEach,c:if取值方式,好久没用c标签了
group[1].isPublic觉得jsp应该是不支持objcet.属性的,在java怎么都有个类型转换这事
#4
要求是这样的:group和extraFunction是2张表,其中isPublic属于extraFunction,status属于group,extraFunction有groupId,不能直接通过${group.extraFunction}拿到extraFunction对象,也就是说group类中没有getExtraFunction()这个方法,假如groupId为1011,要拿到该group的status值,还要拿到isPublic,现在数组的方法可以了,想知道Map方式该怎么写?
#5
groupId在group里面是主键,在extraFunction表是外键是吧,
这就简单了啊,
select g.status,e.isPublic from group g,extraFunction e where g.id=e.groupId and g.groupId=1011
查询出来一般会是list<object[]>类型的,当然可以在java中转为list<Map<key,value>>
jsp c标签取list里面的map,,<c:forEach var="map" items="${mapList}" varStatus="st">
${map.status}
#6
${map.key},取你自定义map里的key
#1
放object[]里取值会靠谱点,
话说你这个查询数据库怎么能放循环里面呢,这得循环多少次啊
unitArray[1] = extraService.getExtraFunctionByGroupId(group.getGroupId());
话说你这个查询数据库怎么能放循环里面呢,这得循环多少次啊
#2
传了groupId,循环多少次与groupList大小相当
#3
确保list有值后:
jsp任何值也没获取到,检查c:forEach,c:if取值方式,好久没用c标签了
group[1].isPublic觉得jsp应该是不支持objcet.属性的,在java怎么都有个类型转换这事
jsp任何值也没获取到,检查c:forEach,c:if取值方式,好久没用c标签了
group[1].isPublic觉得jsp应该是不支持objcet.属性的,在java怎么都有个类型转换这事
#4
要求是这样的:group和extraFunction是2张表,其中isPublic属于extraFunction,status属于group,extraFunction有groupId,不能直接通过${group.extraFunction}拿到extraFunction对象,也就是说group类中没有getExtraFunction()这个方法,假如groupId为1011,要拿到该group的status值,还要拿到isPublic,现在数组的方法可以了,想知道Map方式该怎么写?
#5
要求是这样的:group和extraFunction是2张表,其中isPublic属于extraFunction,status属于group,extraFunction有groupId,不能直接通过${group.extraFunction}拿到extraFunction对象,也就是说group类中没有getExtraFunction()这个方法,假如groupId为1011,要拿到该group的status值,还要拿到isPublic,现在数组的方法可以了,想知道Map方式该怎么写?
groupId在group里面是主键,在extraFunction表是外键是吧,
这就简单了啊,
select g.status,e.isPublic from group g,extraFunction e where g.id=e.groupId and g.groupId=1011
查询出来一般会是list<object[]>类型的,当然可以在java中转为list<Map<key,value>>
jsp c标签取list里面的map,,<c:forEach var="map" items="${mapList}" varStatus="st">
${map.status}
#6
要求是这样的:group和extraFunction是2张表,其中isPublic属于extraFunction,status属于group,extraFunction有groupId,不能直接通过${group.extraFunction}拿到extraFunction对象,也就是说group类中没有getExtraFunction()这个方法,假如groupId为1011,要拿到该group的status值,还要拿到isPublic,现在数组的方法可以了,想知道Map方式该怎么写?
groupId在group里面是主键,在extraFunction表是外键是吧,
这就简单了啊,select g.status,e.isPublic from group g,extraFunction e where g.id=e.groupId and g.groupId=1011
查询出来一般会是list<object[]>类型的,当然可以在java中转为list<Map<key,value>>
jsp c标签取list里面的map,,<c:forEach var="map" items="${mapList}" varStatus="st">
${map.status}