0

オブジェクトのコレクションを表示するスクロール可能なデータテーブルでは、最初の行として 1 つの手動行を追加する必要があります。その行にはinputTextが含まれており、ユーザーはいくつかの値を入力でき、Enterキーを押すと、それらの値が保存され、一番下の行に表示されます。この手動行を最初の行として追加できませんでした。以下は現在のコードです。

<rich:scrollableDataTable value="{resultList}" var="result">
<rich:column>
 <f:facet name="header">Name</f:facet>
<h:outputText value="#{result.name}" />
</rich:column>
<rich:column>
 <f:facet name="header">Category</f:facet>
<h:outputText value="#{result.category}" />
</rich:column>
</rich:scrollableDataTable>

上記のコードは、バックエンドからの値を表示するためのものです。

ここに画像の説明を入力

4

1 に答える 1

1

1) そのためには、バッキング Bean の HtmlScrollableDataTable のインスタンスでバインド rich:scrollableDataTable を使用する必要があります。

バッキング Bean で、アクセサー メソッドを使用してそのインスタンスを作成し、inputText コンポーネントを追加して、それに応じて初期化できます。これらの入力コンポーネントに actionListeners を追加してから、リスナーで、これらの inputText 値を outputText としてテーブルに行として再度追加できます。

2) それ以外の場合は、outputText ではなく inputText を使用し、1 番目以外の後続の行を無効にすることができます。そのため、データのみが表示され、入力が妨げられます。

<rich:scrollableDataTable value="{resultList}" var="result">
<rich:column>
 <f:facet name="header">Name</f:facet>
<h:inputText value="#{result.name}" disabled ="#{!result.isFirstRow}"/>
</rich:column>
<rich:column>
 <f:facet name="header">Category</f:facet>
<h:inputText value="#{result.category}" disabled ="#{!result.isFirstRow}"/>
</rich:column>
</rich:scrollableDataTable>

バッキングビーン:

//---

public void initialize(){

     resultList.add(new Result("", "", true)); // Setting 1st input row enabled
} 

public void inputListener(ActionEvent event){


     // appending object based on input to the resultList

     resultList.add(new Result(inputName, inputValue, false));

     // added a boolean field to identify rows added later & to make them enable/disable accordingly
}

//---

私は Richfaces に精通していませんが、IceFaces で行っていたので、それを達成しようとしました。

于 2011-03-19T19:32:20.403 に答える