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'な殴り書きだったけどいろんな人が見てるんだなぁ・・。
いいかげんなこと書けないなこりゃ・・・。
以上。