我有很多输入字段,用户必须在其中填写一些数据。完成后,他点击
<p:commandButton widgetVar="submitButton" async="true" value="submit" action="#{bean.storeToDB}" />
public String submit(){
//check if session is invalid:
if(exclusiveTimeHasPassed()){
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage("Error", "Your session is not valid anymore. Please reload the page"));
return null; //should stay on the page without losing all data
}
}
现在,我在storeToDB()的一开始就检查"会话"在此期间是否有"超时"(每个用户有10分钟的时间进行输入)
如果会话已经超时,他应该得到一条消息()(不会丢失所有输入),以便显示咆哮消息。
如果nagivation案例返回null(重新加载页面),我如何才能显示咆哮消息?
也许您可以使用primefaces idleMonitor组件。这里有一个例子。在这种情况下,咆哮将在10分钟后显示,你可以触发任何动作。
<p:growl id="messages" showDetail="true" sticky="true" />
<p:idleMonitor timeout="600000">
<p:ajax event="idle" listener="#{idleMonitorController.idleListener}" update="messages" />
<p:ajax event="active" listener="#{idleMonitorController.activeListener}" update="messages" />
</p:idleMonitor>
return null;
不应该刷新页面,但如果它为您刷新了,您可以做一个变通方法:
- 修改您的方法以作废
-
如果你仍然想在其他地方导航,请使用以下代码:
FacesContext.getCurrentInstance().geApplication().getNavigationHandler().handleNavigation(FacesContext.getCurrentInstances(),null,outCome);
但是。如果用户的会话已过期,则无法更新当前视图,您将拥有一个新创建的视图。