我正在执行需要一段时间的验证任务,并且正在将验证过程转换为单独的线程。我有一些工作进度条,使用PortableRenderer和ViewScope,允许它更新进度条组件。
但是,我试图在页面完成或验证错误时重定向用户,而无需用户交互。
我正在使用AND new to icefaces2.0(beta 1)和JSF 2.0,所以答案可能就在我面前。对不起,如果这是一个非常简单的问题。
答案 0 :(得分:1)
让ajax执行这个工作而不是自己生成一个线程。
更新:嗯,这有点简短。但是,如果你不知道自己在做什么,那么自己在servletcontainer中生成一个线程就会遇到重大麻烦。功能要求现在更有意义。您最好的选择是使用IceFaces的推送或轮询组件,这反过来会导致客户端的JavaScript在所需的URL上执行window.location
。
答案 1 :(得分:0)
我最终还是以自己的方式回归。
我将JSF bean放入一个session属性中,并将一个可移植的渲染器作为属性注入。使用session属性,因为Spring无法获得“View”范围。如果有一种方法让Spring这样做,这可以节省很多潜在的陷阱,但是我不知道如何。
一旦页面加载,就会对Spring Controller进行jquery AJAX调用,它将JSF bean从会话中取出,在进程中将其删除,然后继续“验证它”。随着它的进行,它将当前完成状态粘贴到会话属性中,并调用调用便携式渲染器的bean函数,后者又会更新进度表。
也是页面加载函数的一部分,是一个单独的函数,它调用另一个Spring Controller,它返回已完成的状态对象,该对象可能/可能没有错误消息。
我打算通过检查页面上已经由可移植渲染器渲染的值并将所有这些错误发布到bean中来删除第二个控制器,然后可以轻松可靠地渲染它们。
这样,正如BalusC所说,删除了不是由容器直接生成的线程的创建,并允许我在成功完成时通过window.location自动重定向。
如果有更好的方法来做到这一点,我想是有的,请添加答案。我对Icefaces和JSF的了解目前严重缺乏,我要感谢任何人以最好的方式做到这一点。