我需要避免刷新时的双重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 !