jsfライフサイクルでフラッシュがどのように機能するかを理解するのに問題があります。
通常のgetリクエストを介してフェーズリスナーから別のページにリダイレクトしようとしていますが、同時に新しいページに表示されるようにフラッシュメッセージ(もちろん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>
親切に訂正してください。どうもありがとう。