コンストラクタ内でページ遷移をするとき ⇒ RestartResponseException
だーーーー俺ってなんて忘れやすいんだ!と言う事でメモ。以下、見つけたの貼っておく。RestartResponseExceptionを使うんだよ⇒オレ
Hello guys!
http://apache-wicket.1842946.n4.nabble.com/setResponsePage-in-the-beggining-of-a-constructor-does-not-work-td1868345.html
I've got three pages, where I do certain check in the beginning and if the criteria is not met, I redirect to home page. I make it that way:
public MyPageClass {
if (something) {
system.out.println("mypageclass - we're in");
setResponsePage(getApplication().getHomePage());
}
.... page initialization afterwards
}
例えば、スーパークラス内のコンストラクタで判定をしてsetResponsePage()をしてもうまくいかない。例えば以下のコード
class SuperPage extends WebPage {
public SuperPage() {
// なんか条件が合致しないので違うページに飛ばす
if(なんか変){
setResponsePage(NotFoundPage.class);
return;
}
}
}
class SubPage extends WebPage {
public SubPage(){
// データベース接続とか・・・
}
}
こういう場合、当然スーパークラスのコンストラクタ⇒具象クラスのコンストラクタの順で処理が進むけど、setResponsePage()をした後にすぐ設定したページに飛ぶわけではないので(この場合具象クラスのコンストラクタでデータベースの接続を使用とする)こういうのはうまくいかない。なので冒頭のRestartResponseExceptionを使う
class SuperPage extends WebPage {
public SuperPage() {
// なんか条件が合致しないので違うページに飛ばす
if(なんか変){
throw new <b>RestartResponseException</b>(NotFoundPage.class);
}
}
}