Wicketで戻るボタンの実装(2)

前回の続き。

前回id:t_yanoさん(Wicket本頑張ってください)からコメントをいただき、Wicketで戻るボタンを実装する際の簡単なやり方をご教授いただいたのでやってみる。

LoginPage.java

public class LoginPage extends WebPage {
   public LoginPage() {
      super();
      this.setDefaultModel(new CompoundPropertyModel<UserAccount>(new UserAccount()));
      this.add(this.createForm());
      this.add(new FeedbackPanel("message"));
   }

   private Form<Void> createForm(){
      //省略
      form.add(new Button("submit"){
         @Override
         public void onSubmit(){
            //ログイン処理
            

            //いきなりログインページにアクセスされた場合はHomePage.classに遷移する
            if(!this.continueToOriginalDestination()){
               this.setResponsePage(HomePage.class);
            }
         }
      });
   }
}

こうするとログイン後にはじめにアクセスしようとしたページに遷移された。
へぇ〜〜こんだけでよかったんだ〜・・。Wicketですからコレぐらいありますよね〜。さすがWicket!!

ついでにログインが必要なページにアクセスがあってログインしてなかったときにログインページに遷移させるためのクラスも書いておこう。

public class LoginAuthorizationStrategy implements IAuthorizationStrategy{
   @Override
   public boolean isActionAuthorized(Component component, Action action) {
      return true;
   }

   @Override
   public <T extends Component> boolean isInstantiationAuthorized(Class<T> comp) {
      if(comp == MyPage.class){
         if(((MySession)Session.get()).getUser() == null){
            throw new RestartResponseAtInterceptPageException(LoginPage.class);
         }
      }
      return true;
   }	
}

これはorg.apache.wicket.authorization.IAuthorizationStrategyインターフェースを実装したクラス。コンポーネントが表示されるとき?(そこまで調べてない)に必ず通るメソッドで、ここでチェックをしてログインが必要なMyPageにアクセスされた場合、問答無用でLoginPageに遷移されるっていう処理。
これはPageだけじゃなくてコンポーネントごとに処理されるので、例えば特定のラベルを表示させないとかいう制御もできる。
これを適用させるにはApplicationクラスのinitメソッドに

this.getSecuritySettings().setAuthorizationStrategy(new LoginAuthorizationStrategy());

と記述すればOK。

id:t_yanoさんありがとうございました。

ていうかこのブログは俺のためのFuckin'な殴り書きだったけどいろんな人が見てるんだなぁ・・。
いいかげんなこと書けないなこりゃ・・・。

以上。