2

を使用して、この応答DataModel<MyObject>に従ってデータ テーブルに入力します

各行の最後に、Bean の特定のメソッドを呼び出す削除ボタンがあります。データはきれいに削除されます。しかし、削除後にデータが変更されたので、変更を反映するためにページをリロードしたいと思います。

私の試みは、ナビゲーションルールを追加することでしたfaces-config.xml:

概要 /overview.jsp 削除されたサブスクリプション /overview.jsp

持っている<redirect />かどうかに関係なく、リロードも何もしていません。データが削除されるため、Bean のメソッドが実際に呼び出されます。

私のボタンは次のようになります。

<h:dataTable border="1" value="#{overviewBean.overviewModel }" var="item" first="0">
    <h:column id="column13">
        <f:facet name="header">
            <h:outputText value="#{messages.overviewDeleteItem }"></h:outputText>
        </f:facet>
        <h:commandButton action="#{overviewBean.deleteItem}" value="X"/>
    </h:column>
</h:dataTable>

属性を設定すると、type="submit"実際に問題が解決します。ページがリロードされます。

私の質問:提出は本当に必要ですか?JSF (Apache MyFaces) には、削除したばかりの行を削除するために AJAX を使用するメカニズムがありませんか?

JSF初心者を助けてくれてありがとう。

4

1 に答える 1

4

データモデルのバッキングリストからアイテムを削除するだけです。変更はモデルに反映されます。

基本的に:

private List<MyObject> overviewList;
private DataModel overviewModel;

public OverviewBean() {
    overviewList = overviewDAO.list();
    overviewModel = new ListDataModel(overviewList);
}

public void deleteItem() {
    MyObject myObject = (MyObject) overviewModel.getRowData();
    overviewDAO.delete(myObject);
    overviewList.remove(myObject); // See?
}

その後のリダイレクトは必要ありません。アクションメソッドがvoid(またはnull)を返す場合、とにかく同じページに移動します。

Ajaxical機能はJSF2.0で導入されましたが、私が間違っていなければ、JSF1.xを使用しています。最善の策は、これが必要であると考える場合に備えて、Ajax4jsf(現在はRichFacesの一部)のようなサードパーティのコンポーネントライブラリを採用することです。

于 2011-01-18T00:29:05.667 に答える