页面刷新后,每次数据输出顺序都不一样

xinxing028 2008-09-16 05:23:32
我使用SSH做了一个树形结构的组织结构表,在父机构下面有子机构,
然后我想在JSP页面中以这种格式输出数据:
1.父机构名a1
2. 子机构名a11
3。 子机构名a12
4. 子机构名a121
5. 子机构名a122
6.父机构a2

但实际输出时,这种效果是有了 可是每次刷新的时候除了第一层结构不变以外,其他的每次顺序都不一样,请问这个是什么原因啊?
...全文
265 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
xinxing028 2008-09-18
  • 打赏
  • 举报
回复
谢谢哈!!!
已经搞定,就是按你说的在配置文件的set中加了order-by="parentItemId",非常感谢
可以结贴了哈 哈哈
xinxing028 2008-09-17
  • 打赏
  • 举报
回复
我想了一下,这个问题好像是这样的,
1.首先从数据库里查询出一个LIST<ArticleItem>,
2、取出一个ArticleItem,这里就是一级目录
3、获取ArticleItem.chItem(child),这个就是上面一级目录的Set集合,作为二级目录
3、获取child.chItem作为三级目录,同样这里的数据也是个Set集合

所以我在二级目录和三级目录里面的都是Set集合的值,所以这个问题关键是,如何安正确的顺序输出Set集合
changleqy 2008-09-17
  • 打赏
  • 举报
回复
select 语句中没加order by 的话,记录一多起来,就会出现你所说的问题。
ZXEOC 2008-09-17
  • 打赏
  • 举报
回复
delArticleItem4Action、addArticleItemInput4Action,这两个方法体写出来看看
mellow_msb 2008-09-17
  • 打赏
  • 举报
回复
没有把list打出来看看,是不是在list里面已经变化了顺序,用一下list.iterator()试试
xinxing028 2008-09-17
  • 打赏
  • 举报
回复
问题是我在查询的语句中有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();

dm520 2008-09-17
  • 打赏
  • 举报
回复
我想你的你在sql语句上没有用 order by

你加上就好了
ZXEOC 2008-09-17
  • 打赏
  • 举报
回复
我估计是你的add和del操作的时候把子节点的编号顺序搞乱了
無名VF 2008-09-17
  • 打赏
  • 举报
回复
你是用的List吗?如果是的话看一下你的SQL查询语句加一下ORDER BY试一下
xinxing028 2008-09-17
  • 打赏
  • 举报
回复
ZXEOC 你好

我的页面代码如上所示,麻烦帮我看看哈
我这种实现方法有点简单哈,不知道有没有更好的实现方法呢?
xinxing028 2008-09-17
  • 打赏
  • 举报
回复
<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>
ZXEOC 2008-09-17
  • 打赏
  • 举报
回复
没用的,他已经在SQL里加上order by了,但是他select出来之后往Set里一存,再取出来的时候顺序又乱了,因为Set本身没有顺序概念,所以还是换一个集合类吧
fztjava 2008-09-17
  • 打赏
  • 举报
回复
sql中加上order by 对某个字段进行排序就可以了
zou_wei_forever 2008-09-17
  • 打赏
  • 举报
回复
set中的元素是无序的,建议在set标签中加一个order-by属性
ZXEOC 2008-09-17
  • 打赏
  • 举报
回复
你的child和parent对应的都是机构名(包括子机构)么?还是只有child对应机构,parent不对应现实当中的概念?
另外,你的parentItem里用的是set?那么我记得set里的元素至少Sun没有规定要有顺序,所以每次刷新顺序不同就不奇怪了,人家只负责保证把每个元素都取出来,你换个别的集合类,要么就说服你的Boss和客户,这东西没啥关系,只能这样了
xinxing028 2008-09-17
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 ZXEOC 的回复:]
引用 13 楼 xinxing028 的回复:
在这里我的ArticleItem做的是个双向一对多关联(使用的hibernate),chItem由parentItem控制,所以在具体的添加articleItem中没有添加child的,只有添加parent的。

那如果你只想添加一个child怎么办?你的child和parent分别对应什么?
[/Quote]
不能只添加一个child。
只能在添加parent时,在其parenItem中的child的Set集中加入一个child
ZXEOC 2008-09-17
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 xinxing028 的回复:]
在这里我的ArticleItem做的是个双向一对多关联(使用的hibernate),chItem由parentItem控制,所以在具体的添加articleItem中没有添加child的,只有添加parent的。
[/Quote]
那如果你只想添加一个child怎么办?你的child和parent分别对应什么?
xinxing028 2008-09-17
  • 打赏
  • 举报
回复
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");
}
xinxing028 2008-09-17
  • 打赏
  • 举报
回复
在这里我的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>
ZXEOC 2008-09-17
  • 打赏
  • 举报
回复
是啊,你这个办法没错,问题是你怎么取到child的,你的child在数据库里应该有编号,你在给每个child分配编号的时候是按什么原则分配的?如果add一个新的child,那新分配的child的编号怎么分?del一个child的时候多出来的编号又怎么处理?我想知道这个
加载更多回复(1)

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧