gpt4 book ai didi

jsf-2 - 提交 2 个表单时 JSF ViewState 未更新

转载 作者:行者123 更新时间:2023-12-04 18:45:49 28 4
gpt4 key购买 nike

我对 JSF 2 有一个问题。我使用 Mojarra 2.1.14 和 Primefaces 3.1.4

我有一个包含 2 个表单的页面:甲型表格 B .这两个表单在隐藏的输入字段中分别包含 ViewState。

<h:form id="formA" binding="#{sessionBean.formA}">
<h:commandButton value="formA" action="#{sessionBean.actionA}">
<f:ajax/>
</h:commandButton>
</h:form>

<h:form id="formB" binding="#{sessionBean.formB}">
<h:commandButton value="formB" action="#{sessionBean.actionB}">
<f:ajax/>
</h:commandButton>
</h:form>

用户提交 甲型使用 Ajax 操作。在 Java 操作中,我明确更新了 甲型表格 B (已绑定(bind))。
public void actionA(){
FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add(formA.getClientId());
FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add(formB.getClientId());
System.out.println("action A!!");
}

public void actionB(){
System.out.println("action B!!");
}

在 Ajax 响应中有 的 HTML 代码。甲型表格 B (元素)和 ViewState。

JSF 更新了 的 HTML甲型表格 B 并设置调用表单的 ViewState: 甲型 . 表格 B 不包含任何 ViewState。

用户提交 表格 B 使用 Ajax 操作。因为未定义 ViewState,所以 postBack 为 false,并且在 RESTORE 阶段将 renderResponse 设置为 true,跳过了 INVOKE APPLICATION 阶段:未调用该操作。响应 VIEW_STATE 更新后,如果用户 sumbit 表格 B , Action 被调用。

它是 JSF 2 的错误还是限制?还是我做错了什么?

你可以在 GitHub 上找到一个 maven 项目:
https://github.com/nithril/jsf-multiple-form

在此先感谢您的帮助!

最佳答案

您面临的问题与 JSF JavaScript 库的已知问题有关。解决方法是在 rendered 中显式设置另一种形式的客户端 ID。 f:ajax 的属性标签:

<h:form id="formA" binding="#{sessionBean.formA}">
<h:commandButton value="formA" action="#{sessionBean.actionA}">
<f:ajax render=":formB @form"/>
</h:commandButton>
</h:form>

<h:form id="formB" binding="#{sessionBean.formB}">
<h:commandButton value="formB" action="#{sessionBean.actionB}">
<f:ajax render=":formA @form"/>
</h:commandButton>
</h:form>

更多关于这个:
  • Ajax rendering of content which contains another form
  • javax.faces.ViewState is missing after ajax render
  • Rendering other form by ajax causes its view state to be lost, how do I add this back?
  • 关于jsf-2 - 提交 2 个表单时 JSF ViewState 未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14655951/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com