【问题标题】:Call JS function before redirect重定向前调用JS函数
【发布时间】:2012-10-12 09:20:38
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript jsf primefaces


    【解决方案1】:

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

    window.location = newURL;
    

    【讨论】:

    • 好吧,在正常情况下这似乎很合理,但还有另一个方面使它变得更复杂:bean 重定向到一个错误 servlet,并在发生错误时显示错误消息。当然,这一切都可以在 js 中进行管理,例如重定向 url 的回调参数和可能的错误消息,但我不知道我是否应该对这个解决方案感到非常满意。用 jsf 或 primefaces 直接写入 localstore/sessionstore 和来自服务器的响应是不可能的,是吗?
    【解决方案2】:

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

    PrimeFaces.ajax.ResponseProcessor.doRedirect = function(node) {
    
       // <<<< your code is here >>>>
    
       window.location = node.getAttribute('url');
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-12
      • 1970-01-01
      • 2019-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-15
      相关资源
      最近更新 更多