コンストラクタ内でページ遷移をするとき ⇒ 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); } } }