<c:if test="${not empty list}">
<c:forEach items="${list}" var="articleItem">
<tr>
<td width="15%">${articleItem.id }</td>
<td width="15%"><a href="articleItem.do?parentItemId=${articleItem.id }">${articleItem.name}</a></td>
<td width="15%"></td>
<td width="15%"></td>
<td width="15%">${articleItem.parentItem.id }</td>
<td width="25%"><a href="articleItem.do?method=delArticleItem4Action&id=${articleItem.id }"> 删除</a>
<a href="articleItem.do?method=addArticleItemInput4Action&parentItemId=${articleItem.id }"> 添加二级标题</a>
 </td>
</tr>
<c:forEach items="${articleItem.chItem }" var="child">
<tr>
<td width="15%">${child.id }</td>
<td width="15%"></td>
<td width="15%"><a href="articleItem.do?parentItemId=${child.id }">${child.name }</a></td>
<td width="15%"></td>
<td width="15%">${child.parentItem.id }</td>
<td width="25%"><a href="articleItem.do?method=delArticleItem4Action&id=${child.id }"> 删除</a>
<a href="articleItem.do?method=addArticleItemInput4Action&parentItemId=${child.id }"> 添加三级标题</a>
 </td>
</tr>
<c:forEach items="${child.chItem }" var="child2" >
<tr>
<td width="15%">${child2.id }</td>
<td width="15%"></td>
<td width="15%"></td>
<td width="15%"><a href="articleItem.do?parentItemId=${child2.id }">${child2.name }</a></td>
<td width="15%">${child2.parentItem.id }</td>
<td width="25%"><a href="articleItem.do?method=delArticleItem4Action&id=${child2.id }"> 删除</a> 
 </td>
</tr>
</c:forEach>
</c:forEach>
</c:forEach>

解决方案 »

  1.   

    ZXEOC 你好我的页面代码如上所示,麻烦帮我看看哈
    我这种实现方法有点简单哈,不知道有没有更好的实现方法呢?
      

  2.   

    你是用的List吗?如果是的话看一下你的SQL查询语句加一下ORDER BY试一下
      

  3.   

    我估计是你的add和del操作的时候把子节点的编号顺序搞乱了
      

  4.   

    我想你的你在sql语句上没有用 order by你加上就好了
      

  5.   

    问题是我在查询的语句中有order by啊。。
    查询语句如下:
     ArticleItem parentItem = (ArticleItem)getHibernateTemplate().load(ArticleItem.class, parentItemId);
    List list =getSession().createQuery("from ArticleItem ai where ai.parentItem = ? order by id ASC").setParameter(0,parentItem ).list();
      

  6.   

    没有把list打出来看看,是不是在list里面已经变化了顺序,用一下list.iterator()试试
      

  7.   

    delArticleItem4Action、addArticleItemInput4Action,这两个方法体写出来看看
      

  8.   

    select 语句中没加order by 的话,记录一多起来,就会出现你所说的问题。
      

  9.   

    我想了一下,这个问题好像是这样的,
    1.首先从数据库里查询出一个LIST<ArticleItem>,
    2、取出一个ArticleItem,这里就是一级目录
    3、获取ArticleItem.chItem(child),这个就是上面一级目录的Set集合,作为二级目录
    3、获取child.chItem作为三级目录,同样这里的数据也是个Set集合所以我在二级目录和三级目录里面的都是Set集合的值,所以这个问题关键是,如何安正确的顺序输出Set集合
      

  10.   

    是啊,你这个办法没错,问题是你怎么取到child的,你的child在数据库里应该有编号,你在给每个child分配编号的时候是按什么原则分配的?如果add一个新的child,那新分配的child的编号怎么分?del一个child的时候多出来的编号又怎么处理?我想知道这个
      

  11.   

    在这里我的ArticleItem做的是个双向一对多关联(使用的hibernate),chItem由parentItem控制,所以在具体的添加articleItem中没有添加child的,只有添加parent的。
    具体的hbm.xml如下
       <many-to-one name="parentItem" column="parentItemId"/>
        <set name="chItem" inverse="true" lazy="extra">
         <key column="parentItemId"></key>
         <one-to-many class="com.lianzhuang.po.ArticleItem"/>
        </set>
        
      

  12.   

    public ActionForward addArticleItem4Action(ActionMapping mapping,ActionForm form , HttpServletRequest request ,HttpServletResponse response) throws Exception{

    ArticleItemActionForm aiaf = (ArticleItemActionForm)form;
    ArticleItem articleItem = new ArticleItem();
    BeanUtils.copyProperties(aiaf, articleItem);
    articleItemManager.addArticleItem(articleItem, aiaf.getParentItemId());

    return mapping.findForward("add_success");
    }

    public ActionForward delArticleItem4Action(ActionMapping mapping,ActionForm form , HttpServletRequest request ,HttpServletResponse response) throws Exception{

    ArticleItemActionForm aiaf = (ArticleItemActionForm)form;

    articleItemManager.delArticleItem(aiaf.getId());

    return mapping.findForward("del_item");
    }
      

  13.   

    那如果你只想添加一个child怎么办?你的child和parent分别对应什么?
      

  14.   

    不能只添加一个child。
    只能在添加parent时,在其parenItem中的child的Set集中加入一个child
      

  15.   

    你的child和parent对应的都是机构名(包括子机构)么?还是只有child对应机构,parent不对应现实当中的概念?
    另外,你的parentItem里用的是set?那么我记得set里的元素至少Sun没有规定要有顺序,所以每次刷新顺序不同就不奇怪了,人家只负责保证把每个元素都取出来,你换个别的集合类,要么就说服你的Boss和客户,这东西没啥关系,只能这样了
      

  16.   

    set中的元素是无序的,建议在set标签中加一个order-by属性
      

  17.   

    sql中加上order by 对某个字段进行排序就可以了
      

  18.   

    没用的,他已经在SQL里加上order by了,但是他select出来之后往Set里一存,再取出来的时候顺序又乱了,因为Set本身没有顺序概念,所以还是换一个集合类吧
      

  19.   

    谢谢哈!!!
    已经搞定,就是按你说的在配置文件的set中加了order-by="parentItemId",非常感谢
    可以结贴了哈 哈哈