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」に返されたコレクションが含まれていることがわかりましたが、それをデータテーブルに割り当てるにはどうすればよいですか? 返されたコレクションには、'tradeStock' と 'orderStock' の 2 つのテーブルのオブジェクトが含まれています。

編集: 2 つの異なるクラスのフィールドを表示したい - OrderStock のいくつかのフィールドと TradeStock のいくつかのフィールドは、「OrderID」と呼ばれる共通のフィールドで結合されています..これは可能ですか?? そうでない場合、代替ソリューションは何ですか??

4

1 に答える 1

2

注: Java 開発に関する非常に基本的なことを読むことをお勧めします。コードに重大な欠陥がいくつかあります。

しかし、あなたの具体的な問題に関しては:

getOrderReport()呼び出された Beanにメソッドがある場合StockOrderBeanは、ビューで次のように参照する必要があります。

#{stockOrderBean.orderReport}

したがって、テーブル定義は次のようになります。

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

リストを機能させるには、完全に異なるオブジェクトではなく、同じクラス/スーパークラスのオブジェクトがリストに含まれていることを確認する必要があります。次に、クラスOrderに getter と setter を持つ属性 date がある場合、テーブル列で次のように参照できます。

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