通过ajax渲染其他形式会导致其视图状态丢失,如何将其添加回来?

Ale*_*lex 13 forms viewstate ajax jsf jsf-2

我有

<h:form>
    <h:commandLink action="#{my_fake_ajax_link}">
        <h:outputText value="Link" />
        <f:ajax render=":mydiv" />
    </h:commandLink>
</h:form>

<h:panelGroup layout="block" id="mydiv">
    <h:form>
        <h:commandLink action="#{mybean.delete(0)}">
            <h:outputText value="Here" />
            <f:ajax render="@form" />
        </h:commandLink>
    </h:form>
</h:panelGroup>
Run Code Online (Sandbox Code Playgroud)

当我点击"my_fake_ajax_link"时,我必须在"删除"链接上单击两次.这只是一个例子.我没有这个真实案例.我在页面上有多个表单,我不能只在一个表单中添加所有表单.

我检查了问题是什么,它是:

  • 当您单击"my_fake_ajax_link"时,mydiv使用ajax 进行刷新.
  • 缺少ajax上刷新表单的ViewState.

如何添加ViewState?如何在不使用一个表单的情况下使其工作?这看起来像是一个JSF错误.我不想自动刷新该div

jQuery("#mydiv").load(document.location.href);
Run Code Online (Sandbox Code Playgroud)

但在最坏的情况下,我会尽可能的.

Bal*_*usC 23

这是jsf.js处理ajax响应的JSF 自动包含库中的已知问题.另请参阅JSF规范问题790,该问题已在即将推出的JSF 2.3中修复.同时,对于JSF 2.0/2.1/2.2,您必须<h:form>renderattribtue中明确指定另一个的ID 以触​​发正确添加视图状态.

<h:form>
    <h:commandLink action="#{my_fake_ajax_link}">
        <h:outputText value="Link" />
        <f:ajax render=":mydiv :mydivForm" />
    </h:commandLink>
</h:form>

<h:panelGroup layout="block" id="mydiv">
    <h:form id="mydivForm">
        <h:commandLink action="#{mybean.delete(0)}">
            <h:outputText value="Here" />
            <f:ajax render="@form" />
        </h:commandLink>
    </h:form>
</h:panelGroup>
Run Code Online (Sandbox Code Playgroud)

不,这不会导致ajax响应中的任何开销或标记重复.或者,使用OmniFacesfixviewstate.js.

也可以看看:

  • 非常感谢!!!我没有在谷歌上找到这个链接..即使经过长时间的搜索...... (2认同)