2017-02-22 36 views
0

我試圖顯示一個從使用顯示標記(http://displaytag.sf.net)的JSP表上的Hibernate查詢調用獲得的結果,但它不工作。 該查詢包含一個計數函數來獲取行數。例外:[.LookupUtil]查找屬性時出錯。如何在jsp頁面上使用顯示標籤將hibernate結果顯示爲表格?

public List<MyClass> getResults(String section) 
{ 
    try 
    { 
     List<MyClass> resultList = null; 
     final Session session = sessionFactory.getCurrentSession(); 

      //Forming the inner query. 
      DetachedCriteria innerCriteria = DetachedCriteria.forClass(MySecondClass.class,"mySecondClass") 
        .add(Restrictions.eq("mySecondClass.section", section)) 
        .setProjection(Property.forName("classId")); 

      //Form the outer query now. 
      final ProjectionList projection = Projections.projectionList(); 
      projection.add(Projections.rowCount(),"count"); 
      projection.add(Projections.groupProperty("companyName")); 

      final Criteria criteria = session.createCriteria(MyClass.class, "myClass"); 
      criteria.add(Subqueries.propertyIn("classId", innerCriteria)); 
      criteria.setProjection(projection); 

      resultList = criteria.list(); 
      logger.info("Returned result with list "+resultList.size()); 
     return resultList; 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
} 

下面的查詢使用上面休眠代碼表示:

Select Count(*),companyName from MyClass 
where classId in (Select classId from MySecondClass where section='someValue') 
group by companyName 

查詢返回無論是在查詢瀏覽器以及通過在Java休眠正確的值。當試圖使用來顯示結果在JSP:

<display:table id="rowId" pagesize="5" 
         requestURI="/admin/getResult" name="resultList" 
         style="width: 100%;" 
         class="displayTable table table-bordered table-striped table-condensed"> 

         <display:column property="companyName" title="Company" 
          class="displayTable"></display:column> 
         <display:column property="count" title="Row Count" 
          class="displayTable"></display:column> 
        </display:table> 

在運行從UI應用程序中,示出以下錯誤:

javax.servlet.ServletException:javax.servlet.jsp.JspException:異常:[.LookupUtil]在對象類型「[Ljava.lang.Object;」中查找屬性「companyName」時出錯。原因:未知媒體資源'companyName' org.displaytag.util.LookupUtil.getBeanProperty(LookupUtil.java:141) org.displaytag.model.Column.getValue(Column.java:124) org.displaytag.model.Column。 createChoppedAndLinkedValue(Column.java:201)

結果集與顯示錶標記的綁定未正確完成。 我試過了解StackOverFlow中的其他信息,但沒有看到任何代碼錯誤。 另外如何在Java端顯示計數值。

+0

不知何故,它無法從列表對象中獲取屬性名稱。我如何提供getter作爲投影中設置的動態屬性count? –

回答

0

我想你可以嘗試:

1)創建2個字段代表你的數據 前一類:

class Result 
    { 
     Long count; 
     String companyName; 

     // Getter & Setter 
    } 

2 /在這個類中添加默認旁邊一個構造一個

public Result(Long count, String companyName) 
{ 
this.count = count; 
this.companyName = companyName; 
} 

3 /在你的標準函數中添加一個變壓器如下:

projection 
    .add(Projections.groupProperty("companyName")) 
    .setResultTransformer(new AliasToBeanConstructorResultTransformer(Result.class.getConstructors()[1])); 

希望可以幫助

+0

爲2個變量創建一個類,然後將其對象傳遞給UI會降低性能,我猜測結果集會有數千個條目(可能更多)。我試圖將該值以某種方式轉換爲字符串或任何適合的格式,以便可以完成映射。感謝您的建議。 –