2017-07-26 4 views
1

JavaのPrimeFaces DataTableコンポーネントからさまざまな行を取得したいとします。 findComponentを使用してViewRootからDataTableを見つけることができます。今私はコンポーネント(デバッガを使用して)を見て、私は3子ども、子供を見ることができます。これらの子は、私のDataTableの最初の行の3列ですが、私は他の行にアクセスできません。 アクセス方法Primeface DataTable Javaから行

マイ表XHTML

は次のように構成されています(例)

<h:form id="form"> 
    <p:dataTable id="table" var="t"> 
      <p:column> 
       <p:inputNumber id="inputOne" /> 
      </p:column> 
      <p:column> 
       <p:inputNumber id="inputTwo" /> 
      </p:column> 
      <p:column> 
       <p:inputNumber id="inputThree" /> 
      </p:column> 
    </p:dataTable> 
</h:form> 

これは私が私のJavaコード内のDataTableを取得する方法である:私は他の行にアクセスするにはどうすればよい

final DataTable table = (DataTable) getFacesContext().getViewRoot().findComponent("form:table"); 

table.getChildren(); // 3 Children, even if the DataTable got 10 Rows. 

をデータ表?私は最初の行の3つの列を子供として取得します。

私がデバッガを通過できるようにしようとしましたが、他の行/コンポーネントを見つけることができません。

+1

反対の方法についてどう:Javaでのテーブルのデータモデルを作成し、任意の行の任意のフィールドへのフルアクセスを持っていますか? –

+0

DataModelははるかに複雑で実装済みです。無効なフィールドとして表示するには、それらを「無効」(.setValid(false))に設定するJavaのコンポーネントのみが必要です。検証は外部サービスによって行われるため、バリデータタグは使用できません。 – Sly321

+0

このメソッドを使用していないとしても、動作するはずです。バッキングBeanにorg.primefaces.component.datatable.DataTable型のプロパティを定義し、のバインディング属性を使用する必要があります。この新しいプロパティを使用してあなたのバッキングビーンよりも、行の値にアクセスすることができます。適切な方法を確認するにはDataTableのドキュメントをご覧くださいhttps://www.primefaces.org/docs/api/5.0/org/primefaces/component/datatable/DataTable.html –

答えて

0

p:dataTableのrowIndexVar="rowId"属性を使用できると思います。これを使用して、選択した行のIDを渡すことができます。

あなたは「無効」の行を作成するためのリンクを持つ列を追加することができます。

<p:column> 
    <h:commandLink action="#{managedBeanActionToMakeRowInvalid}"> 
    <f:param name="rowIndex" value="#{rowId}" /> 
    </h:commandLink> 
</p:column> 
関連する問題