【问题标题】:Handle ViewExpiredException in the background and restore form values在后台处理 ViewExpiredException 并恢复表单值
【发布时间】:2017-04-06 07:35:53
【问题描述】:

是否有无数据库、primefaces 和“keep-session-alive”的解决方案来防止或在后台静默处理 ViewExpiredException,同时恢复表单输入?

例如,具有“保持登录 cookie”的用户不希望被重定向到某种错误页面或起始页面;他填写了一些表单值,一小时后回来,然后,当他提交表单时,使用其先前的输入重新创建相同的视图,并再次重新执行底层 requestscope-bean 的提交操作。

我已经注意到了omnifaces和mojarras

  <o:enableRestorableView />
  <f:view transient="true"> 

但是当我们谈论永久登录用户时,我不放心,如果这是正确的方法。

感谢您指出正确的方向。

【问题讨论】:

    标签: jsf jsf-2.2 omnifaces viewexpiredexception


    【解决方案1】:

    使用之前的输入重新创建相同的视图,并再次重新执行底层 requestscope-bean 的提交操作

    对于这个要求,透明地重新创建和恢复一个过期的 JSF 表单绑定到一个 request 范围的 bean、&lt;f:view transient="true"&gt; 中的无状态 JSF 是正确的解决方案。

    在这种特定情况下,&lt;o:enableRestorableView&gt; 是不必要的。它仅对透明地重新创建和恢复绑定到 view 范围 bean 的过期 JSF 表单有用。您仍然只需要根据 @PostConstruct 中的请求参数手动填充视图范围的 bean 属性。

    换句话说,您不需要混合使用这些解决方案。这在技术上没有意义,因为视图范围的 bean 在无状态 JSF 中无论如何都是无用的,它们的行为就像请求范围的 bean。

    另见:

    【讨论】:

    • 那么它是否有效,让具有 sessionscope 的用户作为 requestscope-bean 中的 managedproperty 以及底层的瞬态视图?所以我会在必要时自动登录他——至少我看到,输入数据是幸运地提交的,例如使用瞬态方法删除浏览器中的 JSESSIONID cookie。
    • 从技术上讲,这取决于所使用的安全 API/框架,但任何体面的 API/框架都应该以这种方式工作。
    猜你喜欢
    • 2012-02-12
    • 2011-11-22
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    • 2011-04-26
    • 2017-12-16
    • 2013-04-11
    相关资源
    最近更新 更多