2012-10-12 104 views
0

的情况如下: 在客户端的用户输入一些数据,并按下一个命令按钮来发起Ajax请求。根据输入数据,服务器端的JSF Bean会重定向到不同的页面。但是除此之外,HTML5特性localstorage和sessionstorage应该在客户端更新,也取决于bean的结果。对于存储来说,从用户输入的某些数据是必需的,因此存储的Java脚本必须位于原始页面内。呼叫JS功能之前重定向

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

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

回答

1

您需要通过JS而不是JSF来重定向。从动作方法返回null,以便它返回到同一页面,然后执行下面的脚本来执行JS中的重定向。

window.location = newURL; 
+0

好,在正常情况下,这似乎很有道理,但也有一个其他的方面,使得它更加复杂:豆被重定向到一个错误消息的错误的servlet在错误的情况下。当然,这一切都可以在js中管理,例如重定向url的回调参数和可能的错误信息,但是我不知道我是否应该对这个解决方案感到满意。 使用jsf或primefaces直接写入localstore/sessionstore与服务器的响应是不可能的,是吗? – smotron

0

如果您使用JSF PrimeFaces则有可能使全局覆盖PrimeFaces.ajax.ResponseProcessor.doRedirect在JavaScript中把自定义的代码前实际发生重定向:

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

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

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

认沽这个代码在一些js文件中并将其包含在所有页面中。