加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 03:06:38 所属栏目:百科 来源:网络整理
导读:我有 h:form h:commandLink action="#{my_fake_ajax_link}" h:outputText value="Link" / f:ajax render=":mydiv" / /h:commandLink/h:formh:panelGroup layout="block" id="mydiv" h:form h:commandLink action="#{mybean.delete(0)}" h:outputText value="
我有
<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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读