我在运行多次相同的ajax请求时遇到了一些麻烦,该请求使用无状态 JSF(在Tomcat 7上运行的MyFaces 2.2.8 + CDI OpenWebBeans 1.2.7)更新其封闭形式。
这是一个SSCCE,它将比文字更好地描述问题。让我们考虑一个简单的表单,其中inputText和outputText都绑定到bean参数。提交表单只显示inputText字段旁边的值。
<!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>
@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请求再次起作用。
这种行为是预期的还是一个错误?有没有解决方法?
谢谢!
- 以星
答案 0 :(得分:3)
再现。这确实是MyFaces的错误。它适用于Mojarra(用2.2.11测试)。
除了向MyFaces人员报告错误之外,你无能为力。所以我做了:issue 3992。