我在多次运行同一ajax请求时遇到麻烦,该请求用无状态 JSF(在Tomcat 7上运行的MyFaces 2.2.8 + CDI OpenWebBeans 1.2.7)更新其封闭形式。

这是一个SSCCE,它将比文字更好地描述问题。让我们考虑一个简单的形式,其中inputText和outputText都绑定(bind)到bean参数。提交表单只是在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字段(并且不会调用setter)。

实际上,正在发生的事情是,最初添加到表单中的<input type="hidden" autocomplete="off" value="stateless" id="j_id__v_0:javax.faces.ViewState:1" name="javax.faces.ViewState">没有放回到部分渲染中。当手动将其添加到DOM时,ajax请求将再次正常工作。

这是预期的行为还是错误?有什么解决方法吗?

谢谢!

-
齐姆

最佳答案

转载。这确实是MyFaces错误。它可以在Mojarra上运行(已通过2.2.11测试)。

除了向MyFaces员工报告该错误外,您无能为力。所以我做了:issue 3992

09-19 13:05