当前位置: 首页 > 面试题库 >

用ajax渲染其他表单会导致其视图状态丢失,如何将其重新添加?

董意蕴
2023-03-14
问题内容

我有

<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.js的JSF库中的一个已知问题,该库处理ajax响应。另请参见即将发布的JSF
2.3中已修复的JSF规范问题790。同时,对于JSF
2.0 / 2.1 / 2.2,您必须<h:form>render属性内显式指定另一个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响应中引起任何开销或标记重复。或者,使用OmniFacesfixviewstate.js



 类似资料:
  • 我试图探索Android框架是如何管理碎片的,通过我的研究,我了解了很多关于碎片的新知识,但我有一次陷入了困境,无法理解这是如何发生的。 请先试着理解我的场景。它是这样的:我有一个活动,一个接一个地添加两个片段。首次加载活动时,使用以下代码将片段A附加到该活动: 片段A的这些回调方法在加载时被调用 FirstDummyFragment:onCreate:savedInstanceState---

  • 我有一些奇怪的影响,当试图动画视图从消失到可见。见附件gif。 我有一个简单的,它切换的可见性。当更改为可见时,上会出现不希望的类似动画的影响。 我认为这与布局高度有关。请参见下面的布局。 当我删除,并将布局高度更改为时,它工作正常。但这不是解决方案,因为我最终需要一个。 如何避免按钮动画效果? 源代码:

  • 问题内容: 我一直在使用JSTL从数据库中获取值,并使用如下所示的类似代码将其显示在jsp页面中。 我的团队负责人建议我,将查询直接放入jsp页面不是一个好习惯。由于此代码中包含数据库名称,用户名和密码,因此我不确定该代码是否实现了适当的安全性。我想知道您对此事的想法,以及是否有其他选择可以使用JSTL本身来完成。 问题答案: 由于JSTL是在服务器端执行的,因此没有安全漏洞,因为该查询无法被应用

  • 问题内容: 我在DOM中有一个Angular模板。当我的控制器从服务中获取新数据时,它将更新$ scope中的模型,然后重新呈现模板。到目前为止一切都很好。 问题是,在模板重新渲染并且在DOM中(在本例中为jQuery插件)之后,我还需要做一些额外的工作。 似乎应该有一个事件要听,例如AfterRender,但我找不到任何此类事件。也许一条指令可以走,但它似乎还为时过早。 这是一个概述我的问题的j

  • 问题内容: 我从React中学到的一件事是,如果组件的属性不变,那么React不会重新渲染组件。无状态组件也是如此吗?还是它们的行为更像“愚蠢的”函数,并且每次都会执行? 例如,如果我有: 当更新其价值,并获取重新渲染?还是像其他React组件一样足够“聪明”地看到其道具没有改变? 问题答案: 更新25.10.2018 从React 16.6开始,您可以将React.memo用于功能组件以防止重新

  • 问题内容: 在jquery Ajax调用中,我当前正在处理statusCode分别为200和304。但是我还定义了“错误”,以捕获可能返回的任何错误。 如果有相关的验证消息,我们将返回状态码400-错误的请求。 然后,在属于我定义的statusCode“ 400”函数之前,属于“错误”函数。这意味着有两个动作发生。 理想情况下,我不想定义“错误”和“成功”,而仅定义“ statusCode”,但是