Page 画面遷移

forwardの場合

_/**
 * @see Page#onPost()
 */
public void onPost() {
   // Process form post
   ..
   
   setForward("index.htm");
} 

このようにすると、遷移先の新しいPageインスタンスを使用する。遷移先のPageのコントロールは実行されない。(?)

値の引継ぎ

  • 方法1
getContext().setRequestAttribute("customer", customer);

のように、setしてあげる。

  • 方法2

直接、modelに登録

addModel("customer", customer);
setPath("view-customer.htm");
  • 方法3

PageForwarding

EditPage editPage = (EditPage) getContext().createPage("/edit-customer.htm");
editPage.setCustomer(customer);
setForward(editPage);

のように、遷移先画面のPageをcreatePageメソッドで作成して、直接setしてしまう。
画面名をハードコーディングが気になるので、以下の方法推奨

EditPage editPage = (EditPage) getContext().createPage(EditPage.class);
editPage.setCustomer(customer);
setForward(editPage);

redirectの場合

setRedirect("/logout.htm");
コンテキストが "mycorp" で、"/customer/details.htm"を指定した場合、リダイレクト先は "/mycorp/customer/details.htm"となる。
正確なパスを取得したい場合

   String path = getContext().getPagePath(Logout.class);
   setRedirect(path);

forwardの場合と同様に、
クラス指定も可能

setRedirect(Logout.class);

値を引き継ぎたい場合

Long transId = OrderDAO.purchase(order);
setRedirect("trans-complete.htm?transId=" + transId);

とした場合、HttpServletResponse.encodeRedirectURL(url) を利用したencodeが行われる。