问题描述
在list.jsp页面中遍历list对象list对象大概结构如下: id,name,fid,decs,zt1,a,0,a,02,b,1,b,03,c,1,c,0fid是父节点id。用s:iterator来遍历<s:iterator value="list" id="l">编号:<s:property value="id"/>名称:<s:property value="name"/>父节点名称:<s:property value="??"/><!-- 我想显示fid的name值要怎么写 --></s:iterator> 问题补充:在添加完分类后 跳转到list.action页面,并且遍历list对象list对象大概结构如下: id,name,fid,decs,zt1,a,0,a,02,b,1,b,03,c,1,c,0fid是父节点id。用s:iterator来遍历<s:iterator value="list" id="l">编号:<s:property value="id"/>名称:<s:property value="name"/><s:if test="fid==0">根节点</s:if><s:elseif test="*****">父节点名称:<s:property value="??"/></s:elseif><!-- 我想显示fid的name值要怎么写 --></s:iterator>理想结果为:编号:2,名称:b,父节点名称:a
解决方案
引用在页面中把获取的list分别赋给两个变量 你是两个循环了。也可以,但数据过多会影响性能。
解决方案二:
<s:iterator value="lList0" id="fl" status="fl"><s:if test="%{fid==0}"> </s:if> <s:else>//用<s:iterator value="fl.List(这个List是在Hibernate中通过外键映射的一个、、//List)" id="l" status="l">//,这样你就可以取出对应的子数据了!!! <s:iterator value="lList1" id="l" status="l">//进入这层循环后#fl已经失效<s:if test="#fl.fld==#l.id"><s:property value="#l.name"/></s:if> </s:iterator> </s:else></s:iterator>
解决方案三:
你在后台中先将子节点编号,子节点,父节点编号,父节点名称 这些要展示的字段写成一个bean 然后 在后台将组合得到的具体bean 放入到 list<bean> ,在前台只负责显示,这才是正确的思路,前台不要做复杂的逻辑。
解决方案四:
不过你也可以考虑使用<s:set name="_pid" value="-1"/><s:iterator ....><s:if test="#_pid != pid">显示父节点,或者做其他事(主要思路是父节点不同时才显示)</s:if>显示每个子节点,或者做其他事<s:set name="_pid" value="pid"/></s:iterator>
解决方案五:
hibernate你没有建立关系可以使用视图。
解决方案六:
这个问题你要在action取数的时候就要确保数据的连续性,就是父节点后面全是自己的子节点,也就是: 父1 --子11 --子12 父2 --子21 父3 --子31 --子32SELECT t1.id AS prtId, t1.name AS pName, t1.pid AS prtPid, ISNULL(t2.id, 0) AS id, ISNULL(t2.name, '') AS name, ISNULL(t2.pid, 0) AS pid FROM type t1 LEFT OUTER JOINtype t2 ON t1.id = t2.pidWHERE (t1.pid = 0)
解决方案七:
引用<s:if test="%{fid==0}"> 做判断的时候出现了问题吧? 是0 还是‘0’。
解决方案八:
你可以在action里面先把list遍历一下,采用递归按照节点顺序排序。然后重新加到一个对象里面去。在页面上处理比较麻烦。
解决方案九:
我认为这个在查询的时候用sql语句来获得父节点name,然后在放到bean里面,再放到List里面,遍历的时候就很容易了。改下sql。