Challenge Engineer Life !

エンジニア人生を楽しみたい!仕事や趣味で学んだ技術的なことを書いていくブログです。

JSFでactionListener内の判定結果に応じてactionの画面遷移を止める方法 ~PrimeFaces版~

昨日のエントリの続きです。

昨日の動作はPrimeFacesのコンポーネントでも同じことができます(^^)

一応書きかえてみると

JSFxhtml
<!-- 普通に画面遷移するボタン -->
<p:commandButton id="saveBtn0" ajax="false" value="普通に画面遷移する"
                action="#{beforeRedirectBean.redirectPage()}" />

<!-- actionListenerで画面遷移を止めたボタン -->
<p:commandButton id="saveBtn1" ajax="false" value="プログラムで画面遷移を止める"
                actionListener="#{beforeRedirectBean.thinkAction()}"
                action="#{beforeRedirectBean.redirectPage()}"/>

基本的には、hタグをpタグに変えただけです。
あと、画面遷移なので、pタグのcommandButtonはajax=falseを指定しています。

BackingBeanの抜粋
public String redirectPage(){
    //遷移先のページを返す
    return "afterRedirect.xhtml";
}

public void thinkAction(){
    FacesContext context = FacesContext.getCurrentInstance();

    //画面コンポーネントを取得して setActionExpressionでnullを指定
    CommandButton btn = (CommandButton)context.getViewRoot().findComponent(":beforeFrm:saveBtn1");
    btn.setActionExpression(null);
}

こちらもほぼ昨日のコードと同じです。コンポーネントがPrimeFacesに変わったのでimport文を

  • import javax.faces.component.UICommand;

から

  • import org.primefaces.component.commandbutton.CommandButton;

に変えています。

これでPrimeFaces版の完成です。実行すると昨日作ったものと同じ挙動となります。
実行すると、昨日のとはちょっと違った見え方のボタンが出て

f:id:kikutaro777:20130328214443j:plain

左のボタンを押下すると

f:id:kikutaro777:20130327235106j:plain

遷移します。

右のボタンを押下すると

f:id:kikutaro777:20130328214443j:plain

そのまま留まります。

まあ確認するまでもなく当たり前な挙動なのですが(^^;

にほんブログ村 IT技術ブログへ
にほんブログ村 にほんブログ村 IT技術ブログ Javaへ
にほんブログ村