2011-08-30 8 views
5

私はjsfでdataTableを取得していますが、どのようにしてそのテーブルからすべての値を取得できますか?ここでJSFのDataTable

は私のテーブルです:

<h:dataTable id="dt1" value="#{Metadata.placeholders}" var="item" binding="#{Metadata.dataTable}" bgcolor="#F1F1F1" border="10" cellpadding="5" cellspacing="3" first="0" rows="4" width="40%" frame="hsides" rules="all" summary="This is a JSF code to create dataTable." > 

        <f:facet name="header"> 
         <h:outputText value="Select elements for available placeholder" /> 
        </f:facet> 

        <h:column> 
         <f:facet name="header"> 
          <h:outputText value="Placeholder" /> 
         </f:facet> 
         <h:outputText value="#{item.id}"/> 
        </h:column> 

        <h:column> 
         <f:facet name="header"> 
          <h:outputText value="Element"/> 
         </f:facet> 
         <h:selectOneListbox id="elements" size="1" > 
          <f:selectItems value="#{item.elements}" /> 
         </h:selectOneListbox> 
        </h:column> 

        <h:column> 
         <f:facet name="header"> 
          <h:outputText value="Value"/> 
         </f:facet> 
         <h:inputText></h:inputText> 
        </h:column> 

       </h:dataTable><br> 

あなたが見ることができるように第2、第3列はリストボックスと入力テキストfeldsなので、テーブルは5行を持っており、ユーザーが値の形式を選択すると仮定しようリストボックスを作成し、テキストフィールドにテキストを入力すると、ユーザーが「送信」ボタンを押した後にそのデータを取得するにはどうすればよいですか?

+0

これははい、あなたhttp://stackoverflow.com/questions/988869/how-can-i-get-values-out-of-a-selectonemenu-inside-a-jsf-datatable – user219882

+0

を助けるかもしれません、私はこの投稿を見ましたが、それは私のためには機能しません。リスト selectedRowData =(リスト)getDataTable()。getRowData() このコードが例外をスローし、getRowData()メソッドが現在選択されている行のオブジェクトを返す限り... – adgfs

+0

そしてどのように実装しますかgetDataTable()メソッド? FacesContextから取得できるDataModelを返します。 – user219882

答えて

5

ただ、現在の反復項目のプロパティにドロップダウン値をバインドします。

<h:dataTable value="#{metadata.placeholders}" var="placeholder"> 
    <h:column> 
     <h:selectOneMenu value="#{placeholder.element}"> 
      <f:selectItems value="#{placeholder.elements}" /> 
     </h:selectOneMenu> 
    </h:column> 
</h:dataTable> 
<h:commandButton value="Submit" action="#{metadata.submit}" /> 

(私は<h:selectOneMenu>でnonsensicial <h:selectOneListbox size="1">を固定していることに注意してください)

フォームを送信すると、JSFは、単なる反復Placeholderオブジェクトのelementプロパティに値を設定します。個別にアクセスする場合は、アクションメソッドでplaceholdersをループするだけです。

public void submit() { 
    for (Placeholder placeholder : placeholders) { 
     System.out.println(placeholder.getElement()); // Look, JSF has already set it. 
    } 
} 
+0

ありがとうBalusC、素晴らしい投稿!今それは動作します。 – adgfs

+0

あなたは大歓迎です。 – BalusC

+0

@BalusC、私は公式のドキュメントよりもStackOverlowでJSFについて学んだことを誓っています。共有/参加してくれてありがとう。 – fusion27

2

それだけでは、サンプルコードだが、アイデアがあっ

for (int i = 0; i < getDataTable().getRowCount(); i++) { 
    getDataTable().setRowIndex(i); 
    Object object = getDataTable().getRowData(); 
} 
1

あなたのリストボックスとあなたのinputTextはどこ(どのように)その値を格納するために知っていないにする必要があります。 JSFは、通常、マネージドBeanとコンバーターを持ち、値をvalue属性でマップします。

プロパティの名前がわからない場合は、2つのハッシュマップを継承して値を渡すことができます。 例:

< ... value="#{Metadata.placeholderMap[item.id]['age']}" ... > 
関連する問題