4

行の束を持つ JSF データテーブルがあり、各行には次のような selectOneMenu があります。

    <h:form 
      <h:dataTable id="myTable"
        binding="#{myBean.dataTable}"
        value="#{myBean.dataTableRows}" var="row"
        first="0" rows="0" dir="LTR" frame="hsides" rules="all">

        <h:column>
          <f:facet name="header">
            <h:outputText value="Sample Name" />
          </f:facet>
          <h:outputText value="#{row.sampleName}" />
        </h:column>

        <h:column>
          <f:facet name="header">
            <h:outputText value="Role" />
          </f:facet>
          <h:selectOneMenu value="#{row.role}"
            id="roleInput">
            <f:selectItems value="#{myBean.allRoles}" />
          </h:selectOneMenu>
        </h:column>

      </h:dataTable>

      <h:commandButton value="Save" action="#{myBean.save}" />
    </h:form>

ただし、 save メソッドの各行から選択したロールを取得する方法がわかりません。つまり、各行の値を保存したいのです。入力テキストボックスを保存する方法を説明するこの記事を見ました:

http://balusc.blogspot.com/2006/06/using-datatables.html#EditableDatatable

しかし、h:selectOneMenu のケースには当てはまらないようです。これを行うサンプルコードはありますか?

ありがとう!

4

2 に答える 2

2

あなたのテーブルがあなたの Bean にバインドされていることがわかります。Bean では、getDataTable() メソッドを使用してアクセスできます。Java doc は次のように述べています。

public Object getRowData()

Return the data object representing the data for the currently selected row index, if any.

したがって、次のようなコードを実行する場合:

List<String> selectedRowData = (List<String>) getDataTable().getRowData()

その後、ユーザーが選択したすべてのフィールドにアクセスできます。私は自分のプロジェクトとその作業でこれを使用しています。唯一の違いは、代わりに自分のタイプにキャストすることですList<String>

于 2009-06-17T06:24:07.380 に答える
1

フォームに明らかなエラーはありません。save メソッドが呼び出されていない場合は、フォームにメッセージタグを追加して、問題の原因を突き止めてください。問題を再現し、使用している JSF の実装とバージョンを示すサンプル Bean を投稿していただけると助かります。

于 2009-06-14T12:07:58.720 に答える