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

前端之家收集整理的这篇文章主要介绍了通过ajax渲染其他形式会导致其视图状态丢失,我该如何添加?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有
  1. <h:form>
  2. <h:commandLink action="#{my_fake_ajax_link}">
  3. <h:outputText value="Link" />
  4. <f:ajax render=":mydiv" />
  5. </h:commandLink>
  6. </h:form>
  7.  
  8. <h:panelGroup layout="block" id="mydiv">
  9. <h:form>
  10. <h:commandLink action="#{mybean.delete(0)}">
  11. <h:outputText value="Here" />
  12. <f:ajax render="@form" />
  13. </h:commandLink>
  14. </h:form>
  15. </h:panelGroup>

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

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

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

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

  1. 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.在渲染属性内部触发正确添加视图状态.
  1. <h:form>
  2. <h:commandLink action="#{my_fake_ajax_link}">
  3. <h:outputText value="Link" />
  4. <f:ajax render=":mydiv :mydivForm" />
  5. </h:commandLink>
  6. </h:form>
  7.  
  8. <h:panelGroup layout="block" id="mydiv">
  9. <h:form id="mydivForm">
  10. <h:commandLink action="#{mybean.delete(0)}">
  11. <h:outputText value="Here" />
  12. <f:ajax render="@form" />
  13. </h:commandLink>
  14. </h:form>
  15. </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相关文章