JSF 2.0 Ajaxによるナビゲーション

JSF 2.0ではAjaxが簡単に行えるが、ページナビゲーションはどうか。

Ajaxとの連携がないフレームワークでは普通に考えるとページナビゲーションは別に用意して連結させる必要があるが、JSF2ではその心配はない。

たとえば以下のようなテンプレートがあったとする。

<h:commandButton action="#{hoge.next}">
  <f:ajax />
</h:commandButton>

管理対象Beanは以下の通り。

@ManagedBean
@RequestScoped
public class Hoge {
  public String next(){
    return "next";
  }
}


「next」に対して画面遷移をするのだが、これは画面全体、つまりHTMLそのものをまるごとAjaxで置換するようだ。おかげでURLはかわらない。

これが気持ち悪いという場合リダイレクトをいれてPRGパターンのように動かす場合は以下の通り。

@ManagedBean
@RequestScoped
public class Hoge {
  public String next(){
    return "next?faces-redirect=true";
  }
}

これでredirectになり、画面遷移がGETによってされる。

つまり、そのアクションが通常のサブミットなのかAjaxなのか開発者はさほど意識する必要がない。すばらしい。