使用JSF检测页面卸载;影响JSF的标签

时间:2010-07-02 16:21:57

标签: jsf richfaces facelets

我有一个JSF Web应用程序,在一些用户操作之后,它打开了与IBM MQ Q Manager的连接,即执行某些操作。 当用户离开页面(仅使用FF)或关闭浏览器时,我希望我的应用程序检测到这一点并正常关闭连接。

到目前为止我在Web上找到的只是对window.unload的引用和body标签的使用。我正在使用RichFaces和Facelets,所以没有body标签。我怎样才能将上述事件的单词传递给我的bean,以便在用户离开时让它工作?

修改的 受访者BalusC和Bozho是正确的 - 当然有一个身体标签,但在我的情况下,我没有明确指定它,它正在生成;我的index.xhtml文件包含:

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich"
xmlns:c="http://java.sun.com/jstl/core">

<f:view>...

之后我直接使用a4j和富标签等。因此问题变成了(1):是向body标签添加属性以显式添加具有所需属性的body标签的最有效方法,或者是有另一种方式?问题存在,因为我没有在我的代码中明确指定body标签,但已生成一个。 (2):在这种情况下究竟是什么产生了身体标签?

2 个答案:

答案 0 :(得分:3)

  1. 你有一个<body>,你必须有一个
  2. 使用您找到的解决方案,并在<a4j:jsFunction>上执行window.unload,{{1}}依次调用服务器来完成必须完成的任务
  3. 你最好不要依赖于此 - 配置合理的连接超时,以便在足够的时间过后它可以正常地消亡。

答案 1 :(得分:0)

您可以使用jQuery轻松地向任何标记添加属性。在Richfaces中,您可以使用标记

<rich:jQuery>

所以要添加一个属性到body,你会这样做:

<rich:jQuery selector='("body")' timing="onload" query="attr('atribbuteName', 'atribbuteValue')" />