0

ah:dataTable に ah:commandLink を入れて、単一の行を削除したいと考えています。ここに、機能しないコードがあります。助けていただければ幸いです。このコードは私の delete メソッドを呼び出しません。h:dataTable のデータはデータベースから取得されます。

XHTML

        <h:form>
            <div class="center">
                <h:dataTable id="list" value="#{firstBackingBean.list}"
                    var="first" styleClass="center">

                    <!-- other columns (take data from firstBackingBean) -->

                    <h:column>
                        <f:facet name="header" />
                        <h:commandLink value="delete" action="#{secondBackingBean.delete}" >
                            <f:ajax execute="@form" render="list" />
                            <f:param name="id" value="#{first.id}"/>
                        </h:commandLink>
                    </h:column>
                </h:dataTable>
            </div>
        </h:form>

FirstBackingBean

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

@ManagedBean
@ViewScoped
public class FirstBackingBean {
    public void delete() {
        System.out.println("\nBUTTON CLICKED\n");
    }
}

SecondBackingBean

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean
@SessionScoped
public class SecondBackingBean {
    // ...
}
4

2 に答える 2

3

UICommandコンポーネント内のコンポーネントがそのアクションを呼び出さない場合UIData、それは多くの場合value、コンポーネントの属性の背後にあるモデルUIDataが、テーブルを使用してフォームを表示するリクエストと、フォームを送信する後続のリクエストの間で非互換に変更されたことを意味します。

これは、バッキング Bean がリクエスト スコープであり、モデルがリクエスト スコープ変数 (リクエスト パラメータなど) に基づいて事前に初期化されている場合に発生する可能性があります。これは、フォーム送信リクエスト中に存在しなくなりました。

Bean をビュー スコープに配置すると修正されるはずです。

以下も参照してください。

于 2012-09-25T17:48:47.660 に答える
0

答えが出ました!

最初のBackingBeanには@SessionScopedアノテーションが必要で、2番目のBackingBeanには@ViewScopedアノテーションが必要です。

他の回答ありがとうございます。

于 2012-09-26T11:20:56.400 に答える