JSF 2.0:当操作方法返回null时的POST/Redirect/GET模式(保持在同一页面上)



我需要避免刷新时的双重POST。所以我使用POST/Redirect/GET模式(faces-redirect=true)和导航处理程序(由@BalusC)在这篇文章中。当动作方法返回null时,如何在JSF 2.0中使用该模式(保持在同一页面上)?它甚至可能还是我需要使用其他的POST/重定向/GET ?我需要保持一个视图作用域的bean,因此返回相同视图的操作方法(PRG工作)不是解决方案(导致丢失的view scope)。

视图test.xhtml:

<h:commandButton action="#{bean.send}"/>

豆:

@ManagedBean
@ViewScoped
class Bean {
   String send() {
       // do something...
       return null;
   }
   String send2() {
       // do something...
       return "test";  // view scope lost
   }
}

Marioosh.

Post/Redirect/Get导致两种生命周期场景:

  • 重定向导致Non-Faces响应(JSF-2规范第2.1节)。

  • Get导致Non-faces请求和Faces响应(章节2.1.1)。在此场景中创建一个新视图。

一些框架在默认情况下实现了这个策略:例如Spring WebFlow。每个Submit (POST)之后都有一个带有参数"execution"的重定向GET,使Spring能够找到相同的视图。例如:

http://myhost:8080/booking-spring-faces/spring/mypage?execution=e1s2

我希望在JSF工具包中找到这个功能,比如BalusC的Omnifaces !

最新更新