3

ステートレスJSF (Tomcat 7 で動作する MyFaces 2.2.8 + CDI OpenWebBeans 1.2.7)で囲んでいるフォームを更新する同じ ajax リクエストを複数回実行すると、問題が発生します。

これは、言葉よりも問題を説明する SSCCE です。Bean パラメータにバインドされた inputText と outputText の両方を持つ単純なフォームを考えてみましょう。フォームを送信すると、inputText フィールドの横に値が表示されるだけです。

test.xhtml

<!DOCTYPE html>
<html lang="fr" xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html">
<f:view transient="true">
    <h:head>
        <title>Test</title>
    </h:head>
    <h:body>
        <h:form>
            <h:inputText value="#{testBean.txt}" />
            <h:outputText value="#{testBean.txt}" />
            <h:commandButton value="Submit">
                <f:ajax execute="@form" render="@form" />
            </h:commandButton>
        </h:form>
    </h:body>
</f:view>
</html>

TestBean.java

@Named
@RequestScoped
public class TestBean {
    private String txt;

    public String getTxt() {
        return txt;
    }

    public void setTxt(String txt) {
        this.txt = txt;
    }
}

これ以上簡単なことはありません。初めて値を送信すると、期待どおりに機能し、出力が表示されます。しかし、もう一度送信すると (値に関係なく)、inputText フィールドと outputText フィールドは空になります (セッターは呼び出されません)。

<input type="hidden" autocomplete="off" value="stateless" id="j_id__v_0:javax.faces.ViewState:1" name="javax.faces.ViewState">実際、最初にフォームに追加された が部分レンダリングに戻されないということが起こっています。DOM に手動で追加すると、ajax リクエストが再び機能します。

この動作は予期されたものですか、それともバグですか? 回避策はありますか?

ありがとう!

-- ジム

4

1 に答える 1

3

再現。これは確かに MyFaces のバグです。Mojarra で動作します (2.2.11 でテスト済み)。

バグを MyFaces 担当者に報告する以外にできることはありません。だから私はやった: issue 3992

于 2015-05-29T13:41:42.047 に答える