public List showAllTask() {
        try {
         List results = getHibernateTemplate().find("select p.projectCname,t.taskName,t.taskBegindate,t.taskEnddate,t.taskStatus,t.userId from Project p left join p.tasks t where t.id>0 and t.deleted='0'");
            return results;
        } catch (RuntimeException re) {
            log.error("get failed", re);
            throw re;
        }
    }
这个我的一个左连接方法我如何才是在jsp把我想要的字段取出来呢?
我原来都是这么写的"from Project p odery by id" 它返回时一个对象List可以在jsp中这样显示出来
<c:forEach items="${List}" var="it" begin="${pages.beginPosition}" end="${pages.endPosition}">
 <tr> 
    <td>&nbsp;${it.id}</td><td>&nbsp;${it.userId}</td><td>&nbsp;${it.taskName}</td> <td> &nbsp;${it.taskBegindate} </td> <td> &nbsp;${it.taskEnddate} </td><td> &nbsp;${it.taskStatus} </td>
   
  </tr>
 </c:forEach> 但是我那个连接方法会报错  它好像返回的不是List<对象>
我该怎么做呢 如果能把我想要的结果显示出来????

解决方案 »

  1.   

    根据你的查询条件得到的是一个Object[]obj数组元素就是你每个按顺序查出来的值。你可以试试。
      

  2.   

    你的hql中指定了查询某些列以及该对象的所包含对象的某些列 查询结果是一个对象数组..你改成这样子:
    public List showAllTask() {
      try {
      List results = getHibernateTemplate().find("select p from Project p left join p.tasks t where t.id>0 and t.deleted='0'");
      return results;
      } catch (RuntimeException re) {
      log.error("get failed", re);
      throw re;
      }
      }这里查询出来的还是包含若干个project对象的list如过你的project关联的tasks不是延迟加载的..
    那么查询出来P时候 p的子对象tasks已经被填充了. 那些属性就这样获取
    p.projectCname,
    p.tasks.taskName,
    p.tasks.taskBegindate,
    p.tasks.taskEnddate,
    p.tasks.taskStatus,
    p.tasks.userId 
    ...如果你的关联映射中tasks是延迟加载的,可以通过OpenSessinInView 解决因session关闭后访问子对象tasks的问题. spring提供了这样的一个过滤器来解决hibernate延迟加载的问题.
     
      

  3.   

    <c:forEach items="${tasklist.tasks}" var="it" begin="${pages.beginPosition}" end="${pages.endPosition}">
     <tr> 
        <td>&nbsp;${it.tasks.id}</td><td>&nbsp;${it.tasks.userId}</td><td>&nbsp;${it.tasks.taskName}</td> <td> &nbsp;${it.tasks.taskBegindate} </td> <td> &nbsp;${it.tasks.taskEnddate} </td><td> &nbsp;${it.tasks.taskStatus} </td>
       
      </tr>
     </c:forEach>这样不行吗 报这个错javax.servlet.ServletException: The "." operator was supplied with an index value of type "java.lang.String" to be applied to a List or array, but that value cannot be converted to an integer.
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:858)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791)
    org.apache.jsp.showTask_jsp._jspService(org.apache.jsp.showTask_jsp:107)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1063)
    org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:386)
    org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:229)
    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
    org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    cn.yw.util.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:38)
    cn.yw.util.AuthFilter.doFilter(AuthFilter.java:57)
    cn.yw.util.NoCacheFilter.doFilter(NoCacheFilter.java:23)
      

  4.   

    你返回的是一个list对象,但是list对象包含几种对象情况。
    所以遍历的时候
    for(Object o:list){
          Object[] arr=(Object[])o;
          Sysetm.out.println(arr[0])
    Sysetm.out.println(arr[1])
       //...... 
    }
    这样可以得到里面的属性元素,你也可以再次封装太一个所有属性的POJO中。然后返回到前台显示。、