我对理解 flash 在 jsf 生命周期中的工作方式有疑问。
我正在尝试通过正常的 get 请求从阶段侦听器重定向到不同的页面,同时添加要在新页面上显示的 flash 消息(当然我已经设置了 flah.keepmessage)。但是该消息无法显示。我知道出了点问题,如果有人能帮助实施更好的方法(请不要使用过滤器),我将不胜感激。
phaseredirect1.html
<h:body>
<f:view>
<f:phaseListener binding="#{testphase.testPL}"/>
<div>Testing Phases Redirect 1</div>
</f:view>
</h:body>
TestPhaseRedirect.java
@SessionScoped
@ManagedBean(name="testphase")
public class TestPhaseRedirect {
private PhaseListener testPL;
@PostConstruct
private void initializeVar(){
testPL = new PhaseListener() {
@Override
public void afterPhase(PhaseEvent event) {
}
@Override
public void beforePhase(PhaseEvent event) {
getFacesContext().addMessage(null, new FacesMessage("Faces Message: redirecting to page 2..."));
getExternalContext().getFlash().setKeepMessages(true);
ConfigurableNavigationHandler nav = (ConfigurableNavigationHandler)getFacesContext().getApplication().getNavigationHandler();
nav.performNavigation("redirect-to-page2");
getFacesContext().responseComplete();
return;
}
@Override
public PhaseId getPhaseId() {
return PhaseId.RENDER_RESPONSE;
}
};
}
public PhaseListener getTestPL() {
return testPL;
}
}
phaseredirect2.html
<h:body>
<f:view>
<div style="width:400px;">
<p:messages autoUpdate="true" closable="true"/>
<p>Testing Phases Redirect 2</p>
<p> Did it display the message? </p>
</div>
</f:view>
</h:body>
人脸配置
<navigation-case>
<from-outcome>redirect-to-page2</from-outcome>
<to-view-id>/phaseredirect2.html</to-view-id>
<redirect />
</navigation-case>
请纠正我。太感谢了。