【问题标题】:JSF stay on same page when naviagtion returns null当导航返回 null 时,JSF 停留在同一页面上
【发布时间】:2014-04-21 11:03:20
【问题描述】:

我有很多输入字段,用户必须在其中填写一些数据。完成后,他点击了一个

<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 分钟的时间来专门进行他的输入)

如果会话超时,他应该收到一条消息 ()(不会丢失他的所有输入),以便显示咆哮消息。

如何实现显示咆哮消息,然后导航案例返回 null(重新加载页面)?

【问题讨论】:

  • 这里有什么问题???

标签: jsf primefaces navigation growl


【解决方案1】:

也许你可以使用 primefaces idleMonitor 组件。有一个例子here。 在这种情况下,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>

【讨论】:

    【解决方案2】:

    return null; 不应该刷新页面,但如果它适合你,你可以做一个解决方法:

    • 将方法修改为 void
    • 如果您仍想导航到其他地方,请使用以下代码:

      FacesContext.getCurrentInstance().getApplication().getNavigationHandler().handleNavigation(FacesContext.getCurrentInstance(), null, outCome);

    但是。如果用户的会话已过期,则无法更新当前视图,您将拥有一个新创建的视图。

    【讨论】:

      猜你喜欢
      • 2015-10-30
      • 1970-01-01
      • 1970-01-01
      • 2011-11-03
      • 1970-01-01
      • 1970-01-01
      • 2019-10-18
      • 2011-04-10
      • 1970-01-01
      相关资源
      最近更新 更多