例外:[。FindupUtil]查找属性时出错。如何使用display标签在jsp页面上显示hibernate结果?

时间:2017-02-22 04:59:42

标签: java hibernate jsp jsp-tags displaytag

我试图使用显示标记(http://displaytag.sf.net)将从Hibernate查询调用获得的结果显示为JSP上的表,但它不起作用。 该查询包含一个计数函数来获取行数。

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();
    }
}

使用上面的hibernate代码表示下面的查询:

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

查询在查询浏览器中以及在java中通过hibernate返回正确的值。尝试使用以下方法在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:异常:[。FindookUtil]在对象类型“[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端显示计数值。

1 个答案:

答案 0 :(得分: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]));

希望有所帮助