情况如下: 客户端的用户输入一些数据并按下启动ajax请求的命令按钮。根据输入数据,服务器端的JSF Bean重定向到不同的页面。但另外HTML5功能localstorage应分别在客户端更新sessionstorage,这也取决于bean的结果。对于存储,一些从用户输入的数据是必要的,因此存储的java脚本必须位于原始页面内。
现在,问题似乎是在响应之后,在执行js函数之前总是首先完成重定向,因此无法在诅咒的客户端访问来自用户的输入数据。
我在客户端使用回调参数(先前发生重定向)或服务器端的RequestContext.execute按下命令按钮(例如“oncomplete”)之后调用js函数尝试了一些东西(但是这内部也使用了oncomplete事件)我认为)。 我可以想象的一个可能的解决方案是在客户端使用window.onunload和隐藏的输入公式来获取bean的结果。但是没有更好的解决方案吗?
答案 0 :(得分:1)
您需要通过JS而不是JSF重定向。从action方法返回null
,使其返回到同一页面,然后执行以下脚本以在JS中执行重定向。
window.location = newURL;
答案 1 :(得分:0)
如果您将PrimeFaces与JSF一起使用,则可以在javascript中对 PrimeFaces.ajax.ResponseProcessor.doRedirect 进行全局覆盖,以便在实际重定向发生之前放置任何自定义代码:
PrimeFaces.ajax.ResponseProcessor.doRedirect = function(node) {
// <<<< your code is here >>>>
window.location = node.getAttribute('url');
}
将此代码放入某个js文件中,并将其包含在所有页面中。