0

情况如下:客户端用户输入一些数据,按下命令按钮,发起ajax请求。根据输入数据,服务器端的 JSF Bean 重定向到不同的页面。但除了 HTML5 特性 localstorage 和 sessionStorage 应该在客户端更新,也取决于 bean 的结果。对于存储,用户输入的一些数据是必要的,因此用于存储的 java 脚本必须在原始页面中。

现在,问题似乎是在响应之后总是先完成重定向,然后再执行 js 函数,因此无法在 curses 客户端访问用户的输入数据。

在使用回调参数(重定向发生较早)或服务器端的 RequestContext.execute (但在内部也使用我认为的 oncomplete 事件)后,我尝试在客户端按下命令按钮(如“oncomplete”)后调用 js 函数. 我可以想象的一种可能的解决方案是在客户端使用 window.onunload 和一个隐藏的输入公式来获取 bean 的结果。但是没有更好的解决方案吗?

4

2 回答 2

2

您需要通过 JS 而不是 JSF 重定向。从action方法返回null,使其返回到同一页面,然后执行以下脚本在JS中执行重定向。

window.location = newURL;
于 2012-10-12T10:05:12.337 回答
0

如果您将 PrimeFaces 与 JSF 一起使用,则可以在 javascript 中对PrimeFaces.ajax.ResponseProcessor.doRedirect进行全局覆盖,以便在实际重定向发生之前放置任何自定义代码:

PrimeFaces.ajax.ResponseProcessor.doRedirect = function(node) {

   // <<<< your code is here >>>>

   window.location = node.getAttribute('url');
}

将此代码放在某个 js 文件中,并将其包含在您的所有页面中。

于 2017-02-10T08:44:28.003 回答