0

我有一个动态jpql如下:

public Collection getOrderReportByUserName(String userName, Integer scripID, String orderStatus, String orderType) 
{     

    String strQuery = null;

        Collection<TradeStock> ts = em.createQuery("Select t from TradeStock t where t.userName.userName = :userName").setParameter("userName",userName).getResultList();
        if(ts.isEmpty())
        {
            strQuery = "Select o from OrderStock o where o.userName.userName = :userName ";
        }
        else
        {
            strQuery = "Select o,t from OrderStock o,TradeStock t where o.userName.userName = :userName and t.userName.userName = :userName";
        }   

    Collection c = em.createQuery(strQuery).setParameter("userName",userName).getResultList();
    return c;  
}

豆代码:

public collection getOrderReport()
    {

        collOrder=  getOrderReportByUserName(uname,scripID,orderStatus,orderType);

    }

xhtml:

<p:dataTable id="dt" var="order" widgetVar="scripTab" 
                     emptyMessage="No scrip found with given criteria" binding="#{stockOrderBean.dt}" 
                     value="#{stockOrderBean. collOrder}"
                 >

        <p:column>

            <f:facet name="header">
                Scrip Symbol
            </f:facet>
            <h:outputText value="#{order.get(0)}"/> ?? how to assign it?
        </p:column>......

在这里,当我调试它时,我发现“c”包含返回的集合,但现在如何将它分配给数据表?返回的集合包含 2 个表的对象——“tradeStock”和“orderStock”——那么如何在 primefaces 数据表中使用它?

编辑: 我想显示来自两个不同类的字段 - OrderStock 中的一些字段和 TradeStock 中的一些字段,它们由名为“OrderID”的公共字段连接。这可能吗?如果没有,那还有什么替代解决方案?

4

1 回答 1

2

注意:我推荐阅读一些 Java 开发的基础知识。您的代码中存在一些重大缺陷。

但至于你的具体问题:

如果你getOrderReport()在一个被调用的 bean 中有一个方法,StockOrderBean你必须在你的视图中引用它:

#{stockOrderBean.orderReport}

因此,您的表定义应如下所示:

<p:dataTable value="#{stockOrderBean.orderReport}" var="order"..>

您需要确保您的列表包含相同类/超类的对象,而不是完全不同的对象才能使其工作。然后,如果您的类Order具有 getter 和 setter 的属性日期,您可以在表列中引用它:

 <h:outputText value="#{order.date}"/>
于 2012-05-30T09:27:51.687 回答