String queryString="select CON_UNIT as con_unit,sum(DFMONEY) as money from Finacel AS M where M.TOPOSNO=:posno and M.BILLDATE>=:begindate and M.BILLDATE<=:enddate and M.CANCEL=0 and M.PAYID=0 group by M.CON_UNIT";
Session s1=HibernateSessionFactory.getSession();
Transaction t1=s1.beginTransaction();
Query queryObject=s1.createSQLQuery(queryString);
queryObject.setParameter("posno",posno);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");   
queryObject.setParameter("begindate",sdf.format(begindate));
queryObject.setParameter("enddate",sdf.format(enddate));
List<Object[]> list=queryObject.list();
for(Object[] objs : list ){
   System.out.print("查询数据1"+objs[0]);
   System.out.print(",");
   System.out.print("查询数据2"+objs[1]);
}请问怎么用request.setAttribute("posts",list)的方法,让查询出来的数据在jsp页面上面以以下方式显示呢?
<c:forEach var="posts" items="${posts}" varStatus="status">
    ${posts}
</c:forEach>

解决方案 »

  1. 如果你实在不知道怎么写就在action中就用lazyDynaBean 封装下
    比如
    DynaBean bean = nullList list = new ArrayList();
    for(Object[] objs : list ){
    bean=new lazyDynaBean ()
    bean.set("CON_UNIT",objs[0]);
    ......
    list.add(bean)}
    request.setAttribute("posts",list)
    <c:forEach var="posts" items="${posts}" varStatus="status">
    ${posts.CON_UNIT}
    </c:forEach>
    页面上直接访问以上打码手打的,自己调下吧
      

  2. 不行呀,出错了,提示:查询数据1?3·á?ù??,查询数据20.02010-3-31 9:34:53 org.apache.catalina.core.StandardWrapperValve invoke
    严重: Servlet.service() for servlet action threw exception
    java.lang.NullPointerException
    at cn.hibernate.dao.hibernate.FinacelDaoHibernate.getFinacelGroupListByPosIsNotPayOfCarryunitYsf(FinacelDaoHibernate.java:104)
    at cn.sale.OP.action.CarryAction.tijiao(CarryAction.java:82)
    at sun.reflect.GeneratedMethodAccessor26.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:270)
    at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)
    at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Thread.java:619)
      

  3. 我对C标签不是很熟悉
    对于S标签还是比较了解的
    因为C中的那个if实在是让人恼火
    给你举个S标签下的例子让你看下吧
    <s:iterator id="operatorlist" value="#request.operatorlist" >
          <s:property id="operatorlist" value="customName"/>
    </s:iterator>
    以上为了简单
    只输出一个内容
    但是要注意,其中的value是从request中取得的数据,需要用SetAttribute的方式传递参数
    id是用来循环显示的标示
    在<s:property>中的id就是跟上面的id对应的 <s:property>中的value表示你要显示的属性
    我的列表里放的是Custom类(自定义的),其中有customName属性于是循环显示出来这些东西C标签也有相对应的东西
    你看下吧
    我手头没有工具可用
    只知道这些了祝你成功啊
      

  4. c:forEach循环数组
    这里有个人写的方式是 两个c:forEach 外面获得数组 里面循环输出数组 大概就是这么实现的吧 至于什么空指针 检查下你的对象是否为空 scope是否正确 等等等等
      

  5. List<Object[]> list=queryObject.list();
    LazyDynaBean bean = null;
    List mylist=null;
    for(Object[] objs : list ){
    System.out.print("查询数据1"+objs[0]);
    System.out.print(",");
    System.out.print("查询数据2"+objs[1]);
    bean=new LazyDynaBean();
    bean.set("con_unit",objs[0]);
    bean.set("money",objs[1]);
    mylist.add(bean);java.lang.NullPointerException--------为什么还是提示这个}
      

  6. List mylist=null;你这个初始化了么
      

  7. List mylist=null;你说会不会报空指针呢
    还有你不要在循环外部定义你的LazyDynaBean
    否则你list添加的都是最后一个
    你只分配了同一个内存空间
    添加的时候当然只能添加的全是最后一个啦
    在循环里就要循环生成才行你怎么搞的嘛
      

  8. 新手
    不要把这些空指针之类的错误拿出来问
    只会耽误你自己的事情多学会review和checkout
      

  9. List<Object[]> list=queryObject.list();
    ArrayList mylist=new ArrayList();
    for(Object[] objs : list ){
    System.out.print("查询数据1"+objs[0]);
    System.out.print(",");
    System.out.print("查询数据2"+objs[1]);
    LazyDynaBean bean = null;
    bean=new LazyDynaBean();
    bean.set("con_unit",objs[0]);
    bean.set("money",objs[1]);
    mylist.add(bean);
    }request.setAttribute("posts",mylist);
    <c:forEach var="posts" items="${posts}" varStatus="status">
    ${posts.money}----------------为什么还是提示出错呢??</c:forEach>
      

  10. 你想想${posts.money}得到的是什么
    是否对money和posts都有getset方法
    posts是一个列表
    而不是一个类的什么对象
    当然不能".money"了
    既然使用标签就都使用标签
    不要既有EL又有标签的
    这样会混乱的
    你去参考下我说的标签
    你可以google下那些标签的使用
    而且MyEclipse又智能提示的
    自己多动动手!1!!!!!!!
    无语
      

类似问题 »