通过ajax呈现其他表单会导致其视图状态丢失,如何将其添加回?
我有通过ajax呈现其他表单会导致其视图状态丢失,如何将其添加回?,ajax,forms,jsf,jsf-2,viewstate,Ajax,Forms,Jsf,Jsf 2,Viewstate,我有 当我点击一次“my_fake_ajax_链接”时,我必须点击两次“delete”链接。这只是一个例子。我没有这个真正的案子。我在一个页面上有多个表单,我不能只在一个表单中添加所有表单 我检查了问题是什么,它是: 当您单击“my_fake_ajax_链接”时,mydiv将以ajax刷新 ajax上刷新表单的ViewState丢失 如何添加ViewState?如果不使用一个表单,如何使其工作?对我来说,这看起来像一个JSF bug。我不想使用自动刷新该div jQuery("#mydi
当我点击一次“my_fake_ajax_链接”时,我必须点击两次“delete”链接。这只是一个例子。我没有这个真正的案子。我在一个页面上有多个表单,我不能只在一个表单中添加所有表单
我检查了问题是什么,它是:
- 当您单击“my_fake_ajax_链接”时,
将以ajax刷新mydiv
- ajax上刷新表单的ViewState丢失
jQuery("#mydiv").load(document.location.href);
但在最坏的情况下,我将尽可能解决这个问题。这是jsf自动包含的
jsf.js
库中的一个已知问题,该库处理ajax响应。另请参见即将发布的JSF2.3中修复的。同时,使用JSF2.0/2.1/2.2,您必须在render
attribtue中显式指定另一个
的ID,以触发视图状态的正确添加
不,这不会在ajax响应中造成任何开销或标记重复。或者,使用
另见:
onevent
处理程序:
<h:form id="newComment">
<h:commandButton id="saveNewComment" action="#{postBean.actionSaveNewCommentAjax}" value="#{rb['speichern']}">
<f:ajax execute="@form" render=":commentsBox" onevent="function(data) { fixOtherFormsViewState(data, 'newComment') }" />
</h:commandButton>
</h:form>
然后,您需要声明此javascript方法,该方法将采用正确的viewState值,并将其添加到所有没有viewState值的表单中:
<h:outputScript>
function fixOtherFormsViewState(data, goodFormId) {
if (data.status != "success") {
return;
}
var viewState = jQuery("#" + goodFormId + " input[name='javax.faces.ViewState']").val();
jQuery("form:not(:contains(input[name='javax.faces.ViewState']))").each(function (idx, elem) {
var form = jQuery(elem);
var input = jQuery("<input type='hidden' name='javax.faces.ViewState' />").val(viewState);
form.append(input);
});
}
</h:outputScript>
函数fixOtherFormsViewState(数据,goodFormId){
如果(data.status!=“成功”){
返回;
}
var viewState=jQuery(“#”+goodFormId+”输入[name='javax.faces.viewState']”).val();
jQuery(“form:not(:contains(input[name='javax.faces.ViewState']))))。每个(函数(idx,elem){
var form=jQuery(elem);
var input=jQuery(“input type='hidden'name='javax.faces.ViewState'/”).val(ViewState);
表单。追加(输入);
});
}
非常感谢您!!!我在谷歌上找不到这个链接。。即使经过了长时间的搜索……但遗憾的是,它没有进入JSF2.2。让我们再等一两年再修好吧…@mel:OmniFaces to the rescue: