0

私の JSF アプリケーションでは、次のように rich:dataTable を使用します。

<rich:dataTable id="itemTable" value="#{backingBean.itemsList}" var="i" >
    <rich:column>   <f:facet name="header">ItemValue</f:facet>
        <h:inputText id="myId" value="#{i.value}" style="width: 30px" />
    </rich:column> </rich:dataTable>

<h:commandButton id="saveB" value="Save" action="#{backingBean.doSave()}" />

doSave の Bean コード:

public String doSave() {
     Iterator<Item> = itemsList.iterator();
     while(iter.hasNext()) {
         //do something
     }
}

doSave() メソッドでは、現在のアイテムの行インデックスを知る必要があります。これを達成する方法はありますか?

4

1 に答える 1

0

Richfaces 拡張データ テーブルは選択管理をサポートしていますが、Richfaces データテーブルはサポートしていません。

リストから何とか選択したアイテムを取得する最も簡単な方法は、すべての行にアイコンを追加することです。このために、コマンド ボタンをデータ テーブル自体に配置します。

<rich:dataTable id="itemTable" value="#{backingBean.itemsList}" var="i" >
    <rich:column>   
        <h:inputText id="myId" value="#{i.value}" />
        <h:commandButton id="saveB" action="#{backingBean.doSave}" />
    </rich:column>
</rich:dataTable>

Bean コードでは、メソッドを提供しますdoSaveが、追加のパラメーター「ActionEvent」を使用します。

public String doSave(ActionEvent ev) {
    Item selectedItem = null;
    UIDataTable objHtmlDataTable = retrieveDataTable((UIComponent)ev.getSource());

    if (objHtmlDataTable != null) {
        selectedItem = (Item) objHtmlDataTable.getRowData();
    }
}

private static UIDataTable retrieveDataTable(UIComponent component) {
    if (component instanceof UIDataTable) {return (UIDataTable) component;}
    if (component.getParent() == null) {return null;}
    return retrieveDataTable(component.getParent());
}

ActionEvent evがソース要素を提供することがわかります(UIComponent)ev.getSource()。要素にヒットし、そのUIDataTable行データを使用するまで、それをトラバースします。

可能な方法 2 は、関数呼び出しで要素をパラメーターとして指定することです。

 <rich:dataTable id="itemTable" value="#{backingBean.itemsList}" var="i" >
    <rich:column>   
        <h:inputText id="myId" value="#{i.value}" />
        <h:commandButton id="saveB" action="#{backingBean.doSave(i)}" />
    </rich:column>
</rich:dataTable>

そして豆の中

public String doSave(Item item) {
  // do stuff
}

それはそれほどきれいではありませんが、EL でも動作するはずです。それが役に立てば幸い...

于 2013-11-27T17:19:05.550 に答える