ajax - MyFaces 不会将 javax.faces.ViewState 追加到无状态 View 的 ajax 更新上

标签 ajax jsf jsf-2 myfaces jsf-stateless

我在多次运行同一 ajax 请求时遇到一些问题,该请求使用 stateless JSF(在 Tomcat 7 上运行的 MyFaces 2.2.8 + CDI OpenWebBeans 1.2.7)更新其封闭表单。

这是一个比文字更能描述问题的 SSCCE。让我们考虑一个简单的表单,其中 inputText 和 outputText 都绑定(bind)到一个 bean 参数。提交表单只会在 inputText 字段旁边显示值。

测试.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>

测试对象.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 .

关于ajax - MyFaces 不会将 javax.faces.ViewState 追加到无状态 View 的 ajax 更新上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30530686/

相关文章:

javascript - 用 Ajax 响应替换 div 的内部 HTML

javascript - 何时使用 ajax.load() 或 jquery.ajax()

javascript - 如何将href链接的值传递给ajax函数

java - 使大小 validator 忽略 JSF JPA 中可选字段的 null?

javascript - 付款后显示 paypal 交易详情

java - jsf java询问jsf中的时间

java - 正则表达式用于过滤电子邮件、数字和重复输入

java - p :commandButton not working in p:wizard

jsf-2 - 如何在primefaces日历中禁用键盘输入

jsf - 如何以编程方式实例化复合组件或标记组件?