未触发PreRemoveFromViewEvent

时间:2014-06-05 09:26:39

标签: jsf primefaces

你好,

我有一个要求,即在用户导航离开当前页面之前执行某些功能(导航可以是前向或重定向)。

所以我想我会在页面上的任何一个组件上使用这个名为PreRemoveFromViewEvent的系统事件。

PreRemoveFromViewEvent一直是我的理论概念,我从未实际使用过它。

所以我在h:inputText上应用了这个事件,并认为当用户离开页面时它将触发事件,并且在加载新页面/视图之前将从视图中删除此h:inputText

但这不是解雇。

我使用它吗? 我在正确的组件上使用它吗? 它会在导航之前发射事件吗?

这是我的代码:

<h:inputText id="abc">
    <f:event listener="#{myManagedBean.preRemoveFromViewHandler}"     
             type="javax.faces.event.PreRemoveFromViewEvent"/> 
</h:inputText>

<p:commandButton action="page2.xhtml" value="NEXT"/>

监听器:

public void preRemoveFromViewHandler(PreRemoveFromViewEvent prfve){
      //USER is navigating away so save the data
}

使用:JSF Mojarra 2.1.13 | Primefaces:3.5

1 个答案:

答案 0 :(得分:0)

您应该使用PreDestroyViewMapEvent,而是在<h:body/><f:view/>中注册。当一个人从视图中导航时,该事件就会被触发。从规范:

  

在销毁Map之前,必须使用UIViewRoot作为事件源发布PreDestroyViewMapEvent

仅当从视图中移除父组件时才会触发PreRemoveFromViewEvent,这在导航离开页面时不一定会发生。