2012-01-08 24 views
2

私は、各行がオークションアイテムを表すdataTableと各アイテムの横にある入札ボタンを持っています。ユーザーがボタンをクリックすると、入力テキストを含む入札コンポーネントと入札を送信するボタンが表示されます。この「入札」コンポーネントは、ユーザーが入札しているオークションアイテムのすぐ下にある必要があります。JSF 2に行コンポーネントを動的に追加するdataTable

通常のHTMLでは、これは簡単です:条件付きでオークションアイテムの行の下にレンダリングされる別の行があります。私はこれを行う方法を知っています。

しかし、dataTableのは、列に基づいて、私は動的ではない列をレンダリングする必要がありますが、行(COLSPANでは、このDataTableの列の数に等しい。)され

は(私はわからないんだけど、これがあれば明示的に言えば、動的に挿入された行には別のオークションアイテムがありません。その他のウィジェットがいくつかあります)。

これを行う方法はありますか?

答えて

4

元のJSFのタグだけでは、あなたが望むものを達成できるとは思いません。実際、あなた自身でこのような複合コンポーネントを開発することは非常に難しいかもしれません。

PrimeFacesの<p:dataTable>を見ると、ExpandableRowsという機能が表示されます。あなたのテーブルには、次のようになります。

<h:form> 
    <p:dataTable var="item" value="#{mrBean.itemsToBid}"> 

     <f:facet name="header"> 
      Items for Bidding 
     </f:facet> 

     <p:column style="width:16px"> 
      <p:rowToggler /> 
     </p:column> 

     <p:column headerText="Name" > 
      #{item.name} 
     </p:column> 

     <p:column headerText="Condition" > 
      #{item.condition} 
     </p:column> 

     <p:rowExpansion> 

      <h:panelGrid id="display" columns="2" > 
       <h:outputText value="Your bid:" /> 
       <h:inputText value="#{mrBean.bidAmount}" /> 

       <h:commandButton actionListener="#{mrBean.bid(item)}" value="Bid"/> 
      </h:panelGrid> 

     </p:rowExpansion> 
    </p:dataTable> 
</h:form> 

ご入札形式は<p:rowExpansion>コンポーネント内にあり、それは右のあなたの項目の行の下に表示されません。

+0

ありがとう、Mr. J4mes。これがうまくいくように見えます。しかし、私はrowTogglerが "あなたの入札を置く"というテキストを読んでいるようなコマンドである必要があり、小さな矢は必要ありません。これはできますか? – Herzog

+0

''の属性の一つは 'class'です。 CSSボタン、たとえば「あなたの雌犬を置く:P」と書いて、このボタンにマップすることができます。 –

+0

良い答え(私の+1)が、h:outputTextを削除してp:column;で直接式を使用してください) –

関連する問題