急!!谁来帮我看看啊 关于hibernate查询出来的数据的显示问题!

huahuamay 2008-04-15 01:27:27
我想在jsp页面上显示5个上传视频最多的用户名
mapDao里操作如下:

/**
*函数说明:获取上传视频最多的前五个用户
*/
public List getRedTomatos() {
final String hql = "FROM User u, Video v where v.v_uid = u.userid GROUP BY u.username ORDER BY COUNT(v.v_uid) desc";
return this.getHibernateTemplate().executeFind(new HibernateCallback() {

public List doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session.createQuery(hql);
query.setMaxResults(5);
return query.list();
}
});

}


action里相关内容如下:

availableItems = userService.getRedTomatos();


jsp代码如下:

<s:iterator value="availableItems" status="a">
<s:if test="#a.getIndex()%1==0||#a.first">
<tr>
</s:if>
<td height="20">
<s:property value="username" />
</td>
</s:iterator>


我用一摸一样的方法 来显示点击次数最多的前五个视频 都好用了 都能显示了
就是sql语句是“final String hql = "FROM Video ORDER BY v_num desc";”
可是显示上传视频最多的用户名(username)怎么就不好使了呢??
难道是因为显示5个视频时只用了1个表 显示上传最多用户时用了2个表??
控制台已经显示出来了sql语句
Hibernate: select user0_.userid as userid0_0_, video1_.v_id as v1_1_1_, user0_.username as username0_0_, user0_.password as password0_0_, user0_.sex as sex0_0_, user0_.age as age0_0_, user0_.hobby as hobby0_0_, user0_.email as email0_0_, user0_.reg_date as reg8_0_0_, video1_.v_title as v2_1_1_, video1_.v_des as v3_1_1_, video1_.v_tag1 as v4_1_1_, video1_.v_tag2 as v5_1_1_, video1_.v_tag3 as v6_1_1_, video1_.v_sort as v7_1_1_, video1_.v_src as v8_1_1_, video1_.v_path as v9_1_1_, video1_.v_loadtime as v10_1_1_, video1_.v_uid as v11_1_1_, video1_.v_pic as v12_1_1_, video1_.uploadFileName as uploadF13_1_1_, video1_.v_num as v14_1_1_ from user user0_, video video1_ where video1_.v_uid=user0_.userid group by user0_.username order by count(video1_.v_uid) desc limit ?
这个我在mysql front里也能执行成功

我用debug看 也看到了action里的availableItems 执行完 size=5了
怎么就是显示不到jsp页面呢????

...全文
327 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
huahuamay 2008-04-15
  • 打赏
  • 举报
回复
回楼上的:
我用的是struts2+hibernate3+spring2的框架
jsp页面没用过<% %> 用的都是struts2的标签~
<%=request.getParameter(XXX)%>你的意思是这样写吗?
seeSkyblue 2008-04-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 huahuamay 的回复:]
引用 7 楼 seeSkyblue 的回复:
既然都有对象了就先直接在页面里面用Java代码打印出username看看咯
会不会你的username没有get方法?


我改了sql语句
final String hql = "select u.username as uname FROM User u, Video v where v.v_uid = u.userid GROUP BY u.username ORDER BY COUNT(v.v_uid) desc";

在action里新建了uname 和get set方法
然后打印System.out.println("----------availableItems :"+avai…
[/Quote]

我想问的是你在JSP页面里面不用你的那些标签用<%java 语句%>是不是也能打印出来?感觉你的那些标签有问题。
huahuamay 2008-04-15
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 AWUSOFT 的回复:]
不懂你的那些标签
[/Quote]

不好意思~~多亏你了!哈哈 这就结贴!
huahuamay 2008-04-15
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 AWUSOFT 的回复:]
FROM User u, Video v where v.v_uid = u.userid GROUP BY u.username ORDER BY COUNT(v.v_uid) desc";

这个HQL语句出来的结果是Object[]
修改为

select u FROM User u, Video v where v.v_uid = u.userid GROUP BY u.username ORDER BY COUNT(v.v_uid) desc";


因为你是要查前面五个的,所以可以控制一下这个List

query.setFirstResult(0);//0还是1忘记了
query.setMaxResults(5);//因为要最多的五个
[/Quote]

不好意思!刚才改得有点儿乱
现在好了 按照你说的改了就好了
jsp页面根本没用改 哈哈
真是太感谢了!!!!3Q3Q!!!
awusoft 2008-04-15
  • 打赏
  • 举报
回复
不懂你的那些标签
huahuamay 2008-04-15
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 AWUSOFT 的回复:]
FROM User u, Video v where v.v_uid = u.userid GROUP BY u.username ORDER BY COUNT(v.v_uid) desc";

这个HQL语句出来的结果是Object[]
修改为

select u FROM User u, Video v where v.v_uid = u.userid GROUP BY u.username ORDER BY COUNT(v.v_uid) desc";


因为你是要查前面五个的,所以可以控制一下这个List

query.setFirstResult(0);//0还是1忘记了
query.setMaxResults(5);//因为要最多的五个
[/Quote]

改了 还是没好用
我现在用的语句是
"select u.username as uname FROM User u, Video v where v.v_uid = u.userid GROUP BY u.username ORDER BY COUNT(v.v_uid) desc
huahuamay 2008-04-15
  • 打赏
  • 举报
回复
我把jsp页面的显示改了
把availableItems直接显示了

<tr>
<td height="20"><span class="STYLE17">
<s:property value="availableItems[0]" /></span></td>
<tr><td height="20"><span class="STYLE17">
<s:property value="availableItems[1]" /></span></td>
<tr><td height="20"><span class="STYLE17">
<s:property value="availableItems[2]" /></span></td>
<tr><td height="20"><span class="STYLE17">
<s:property value="availableItems[3]" /></span></td>
<tr>
<td height="20"><span class="STYLE17">
<s:property value="availableItems[4]" /></span></td>

现在好了 能正常显示我要的数据了
这个方法是不是很笨啊。。
awusoft 2008-04-15
  • 打赏
  • 举报
回复
FROM User u, Video v where v.v_uid = u.userid GROUP BY u.username ORDER BY COUNT(v.v_uid) desc";

这个HQL语句出来的结果是Object[]
修改为

select u FROM User u, Video v where v.v_uid = u.userid GROUP BY u.username ORDER BY COUNT(v.v_uid) desc";


因为你是要查前面五个的,所以可以控制一下这个List

query.setFirstResult(0);//0还是1忘记了
query.setMaxResults(5);//因为要最多的五个


huahuamay 2008-04-15
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 seeSkyblue 的回复:]
既然都有对象了就先直接在页面里面用Java代码打印出username看看咯
会不会你的username没有get方法?
[/Quote]

我改了sql语句
final String hql = "select u.username as uname FROM User u, Video v where v.v_uid = u.userid GROUP BY u.username ORDER BY COUNT(v.v_uid) desc";

在action里新建了uname 和get set方法
然后打印System.out.println("----------availableItems :"+availableItems10+uname);

出来的是

----------availableItems :[HuaHua, Betty, Amy, AmyKing, Carl]null

名字出来了!我感觉就快解决了。。可是uname怎么又是null了呢
huahuamay 2008-04-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ProvidenceZY 的回复:]
做个为空的判断证实一下你的判断!
[/Quote]

我把代码改成

<s:iterator value="availableItems" status="a">
<s:if test="#a==null">
<tr> <td>NULL</td></tr>
</s:if>
<s:else>
<td height="20"><span class="STYLE17">
<s:property value="username" />YES</span></td></s:else>
</s:iterator>

结果打印出来5个YES
seeSkyblue 2008-04-15
  • 打赏
  • 举报
回复
既然都有对象了就先直接在页面里面用Java代码打印出username看看咯
会不会你的username没有get方法?
huahuamay 2008-04-15
  • 打赏
  • 举报
回复
这个会不会跟hibernate的多表关联有关啊?
因为我是from了user和video两个表
可是我纳闷儿的是 打印出来的availableItems 表明 已经取到了这5个object了
说明已经正确的查询出来了
55555555 咋就不显示呢?? 我都琢磨一天了。。
眼瞅着毕设就快做完了 咋办呀。。
iskyshop 2008-04-15
  • 打赏
  • 举报
回复
做个为空的判断证实一下你的判断!
huahuamay 2008-04-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 seeSkyblue 的回复:]
在页面里面加点Java代码把availableItems里面的东西打印出来看看。
我怀疑是不是availableItems里面没有东西?
[/Quote]
回楼上的:
打印出来的是
----------availableItems :
[[Ljava.lang.Object;@1a8402c, [Ljava.lang.Object;@10d0eae, [Ljava.lang.Object;@3eec1a, [Ljava.lang.Object;@fedfb6, [Ljava.lang.Object;@1115152]
seeSkyblue 2008-04-15
  • 打赏
  • 举报
回复
在页面里面加点Java代码把availableItems里面的东西打印出来看看。
我怀疑是不是availableItems里面没有东西?
huahuamay 2008-04-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 seeSkyblue 的回复:]
1、这个表达式里面的test的值我没看懂,是EL表达式么?可以这么写?
2、a.getIndex()%1==0 貌似这个是恒等式,那你的循环里面是不是显示5个 <tr>出来了?但是却没有一个 </tr>
3、看看你显示出来页面的源代码是不是想我所说的那样?
[/Quote]
回楼上的:
1.这个没有问题 之前都是这样用的 都能显示的 貌似struts2可以这样用滴
2.这句去掉了也可以 即使去掉了tr 也一个也显示不出来 很是费解。。
3.照你说的改成

<s:iterator value="availableItems10" status="rt">
<tr>
<td height="20">
<s:property value="username" />
</td>
</tr>
</s:iterator>

还是一样没有显示出来 多谢楼上的
seeSkyblue 2008-04-15
  • 打赏
  • 举报
回复

<s:if test="#a.getIndex()%1==0||#a.first">


1、这个表达式里面的test的值我没看懂,是EL表达式么?可以这么写?
2、a.getIndex()%1==0 貌似这个是恒等式,那你的循环里面是不是显示5个<tr>出来了?但是却没有一个</tr>
3、看看你显示出来页面的源代码是不是想我所说的那样?

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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