我有一个jsf 1.2应用程序,在索引页面中有一些链接。在新的jquery对话框上点击此链接。每个链接都在一个不同的对话框中打开我的应用程序的新页面,因此,应用程序可以在一个页面中的许多对话框中打开许多链接。我所有的托管bean都有会话范围。
我的问题是,当我打开一个新对话框并点击里面的任何链接时,我的应用程序仍然正常,但在此之后,如果我点击我的索引页面中的其他链接打开另一个对话框,该应用程序显示我ViewExpiredException
。我尝试将我的jsf更新为2.0,将EnableRestoreView11Compatibility
中的web.xml
设置为true,在我的bean中使用keepAlive
,但没有任何效果。
我认为这是因为我有一个主页面有一个状态,当我点击在jquery对话框中打开一个新页面时,它会加载整个页面并将html放入其中。因此,请求没有引用主页的状态。我怎么解决这个问题?
答案 0 :(得分:1)
似乎JSF
中的错误尚未修复,计划在JSF 2.3
中修复
您可以使用java.net
中针对jquery
发布的以下解决方法。
http://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-790
var patchJSF = function () {
jsf.ajax.addOnEvent(function (e) {
if (e.status === 'success') {
$("partial-response:first changes:first update[id='javax.faces.ViewState']",
e.responseXML).each(function (i, u) {
// update all forms
$(document.forms).each(function (i, f) {
var field = $("input[name='javax.faces.ViewState']", f);
if (field.length == 0) {
field = $("<input type=\"hidden\" name=\"javax.faces.ViewState\" />").
appendTo(f);
}
field.val(u.firstChild.data);
});
});
}
});
}