你好,
我有一个需求,在用户导航离开当前页面之前执行一些功能(导航可以通过转发或重定向)。
所以我想在页面上的任何一个组件上使用这个称为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
}
USING: JSF Mojarra 2.1.13 | Primefaces: 3.5
您应该使用PreDestroyViewMapEvent
,在<h:body/>
或<f:view/>
中注册。这个事件是当用户从视图导航离开时触发的事件。来自规范:
在Map被销毁之前,必须使用UIViewRoot作为事件源发布PreDestroyViewMapEvent
PreRemoveFromViewEvent
仅在父组件从视图图中移除时触发,当导航离开页面时不一定会发生这种情况。