你好,
我有一个要求,即在用户导航离开当前页面之前执行某些功能(导航可以是前向或重定向)。
所以我想我会在页面上的任何一个组件上使用这个名为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
答案 0 :(得分:0)
您应该使用PreDestroyViewMapEvent
,而是在<h:body/>
或<f:view/>
中注册。当一个人从视图中导航时,该事件就会被触发。从规范:
在销毁Map之前,必须使用UIViewRoot作为事件源发布PreDestroyViewMapEvent
仅当从视图中移除父组件时才会触发PreRemoveFromViewEvent
,这在导航离开页面时不一定会发生。