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

前端之家收集整理的这篇文章主要介绍了通过ajax渲染其他形式会导致其视图状态丢失,我该如何添加?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有
<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>

当我点击“my_fake_ajax_link”一次,那么我必须在“删除链接上点击两次.这只是一个例子.我没有这个真实的情况.我在一个页面上有多个表单,我不能将它们全部添加到单个表单中.

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

>当您点击“my_fake_ajax_link”时,mydiv将使用ajax进行刷新.
>在ajax上刷新表单的ViewState丢失.

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

jQuery("#mydiv").load(document.location.href);

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

这是JSF自动包含的jsf.js库中处理ajax响应的已知问题.另见 JSF spec issue 790在即将到来的JSF 2.3中是固定的.同时,使用JSF 2.0 / 2.1 / 2.2,您必须明确指定其他< h:form>的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>

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

也可以看看:

> Communication in JSF 2.0 – Ajax rendering of content which contains another form
> h:commandButton/h:commandLink does not work on first click,works only on second click

猜你在找的Ajax相关文章