Wicketのtipsメモ
Wicket Wikiをあんまり読んでなかったので、少し読んでみました。その中で個人的に参考になった書き方をメモ。
あと、そのほかのブログやtwitterでの参考になったものも。
Pageのマークアップのファイルを変更する方法
ログイン前とログイン後で変更したかったので地味に困っていました。
WebPageクラスのサブクラスでpublic String getVariation()をオーバーライドして、適当な文字列を返すようにします。
Pageの名前がIndexPage.javaの場合、普段はIndexPage.htmlが利用されますが、getVariationがたとえば"foo"を返した時はIndexPage_foo.htmlが利用されるようになります。
public class IndexPage extends WebPage { public IndexPage(PageParameters parameters) { if(parameters!=null) { this.variant = (String)parameters.get("foo"); } } private String variant; public String getVariation() { return variant; } }
ログアウトの実装
リンクをクリックしたらログアウトして特定のページにリダイレクトする時の書き方。
Link logoutLink = new Link("my-link-wicket-id") { public void onClick() { //セッションの破棄 getSession().invalidate(); getRequestCycle().setRedirect(true); //リダイレクト setResponsePage(WhereEverYouWantToRedirect.class); } };
現在表示されているページへのリンクを無効にする
ナビゲーションなどで、表示されているページへのリンクを無効にしたいときに使うようです。
有効にすると、条件を満たしたときにaがspanとemに置き換わります。
new BookmarkablePageLink("page", Page.class).setAutoEnable( true );
ページ単位、アプリケーション単位でも設定できるようです。
cookieを使う
生成
((WebResponse)getRequestCycle().getResponse()).addCookie(new Cookie("cookieName", "cookieValue"));
取得
Cookie[] cookies = ((WebRequest)getRequestCycle().getRequest()).getCookies();
そのほかの方法
//staticメソッドを使っていつでも実行可能 ((WebResponse)RequestCycle.get().getResponse()).addCookie(new Cookie("cookieName", "cookieValue")); //WebPageのサブクラスで可能 getWebRequestCycle().getWebResponse().addCookie(new Cookie("cookieName", "cookieValue"));
強制的にページ遷移
ログインしてないときなどに、強制的にログインページに飛ばしたりするのに使うようです。
setResponsePageを使うのではなく、Exceptionを発生させて遷移させるようです。
throw new RestartResponseException(WhereEverYouWantToRedirect.class);
LinkのBody部分の書き換え
アンカータグの中を変える方法がわからず悩んでいたところ、id:t_yanoさんにTwitter経由で教えてもらいました。
以下のように、onComponentTagBodyをオーバーライドしてreplaceComponentTagBodyを使ってやればよいそうです。
BookmarkablePageLink link = new BookmarkablePageLink("link", IndexPage.class){ private static final long serialVersionUID = 1L; @Override protected void onComponentTagBody(MarkupStream arg0, ComponentTag arg1) { replaceComponentTagBody(arg0, arg1, "アンカータグの中の文字"); }};
おまけ
Wicket Wikiのリファレンスのタイトルを一部翻訳しました(リンク先は英語です)。
どんなことが載ってるのかを知るための参考程度に使ってください。
拙い英語力ですので、間違っているところがありましたらご指摘ください。
Wicket Wikiのリファレンス > WicketのHowTo
- データベースとの連携
- ブログチュートリアル - SpringとJPA-Hibernateを使ったブログアプリケーションのサンプル
- Databinder - WicketとHibernateを連携する外部プロジェクト
- iBatis - JavaオブジェクトをSQLクエリの結果にマッピングする
- [http://cwiki.apache.org/WICKET/reading-from-a-database.html:title=データベースから読み込む
- Wicket電話帳 - SpringとHibernate/iBatisを用いたCRUDのサンプル
- 一般的なアプリケーション
- 機能的なウィザードを構築する - Wicketでウィザードを作る方法
- 振る舞いの合成 - 異なる振る舞いを一つにまとめる方法
- WebSessionのカスタマイズ(セッションの中にオブジェクトを持つ)
- 表示URLを取得 - WebPageから実際のURLを文字列として取得する
- HTMLタグの属性の追加および更新
- カスタムコンポーネントの作り方
- (バイト配列から)Flashムービーを表示する方法
- 外部の画像を読み込む
- 限度を設けてページングコンポーネントを隠すNavigationToolbarの作り方
- http://cwiki.apache.org/WICKET/how-to-order-your-feedback-messages.html
- フィードバックメッセージを順序付けする方法
- Wicketのページではない外部のページへリダイレクトする方法
- SSLモードに切り替える方法 - httpからhttpsへ透過的に切り替える方法の説明
- ポップアップからリダイレクトする方法
- 子ウィンドウ
- FlashをWicketアプリケーションに追加するObjectContainer - 隠れた引用
- PanelとBorder - Panelを使って再利用可能な要素を作る方法
- 生のHttpServletRequest
- バリデーションでバンドルが要求されたメッセージを取り除く
- レンダリング方式
- RSSページWicketでRSSページを作る方法
- SEO - 検索エンジン最適化Wicketを使ってSEO対策する
- ステートレスページ
- カスタムコンバーターを使う
- 遮断ページを使う - 最後に訪れたページとリダイレクト先を覚えておく
- ビュー層
- マークアップフィルタを加える(1.1と1.2しか関係ない?)
- WicketコンポーネントのonclickでJavascriptのメソッドを呼ぶ
- アンカータグの振る舞いを変える
Borderを使う一貫したページのレイアウト(情報が古い)- パネルを使って動的マークアップ階層を生成する
- CSSが使用可能なfeedbackパネル
- cookieを扱う
- ブラウザの情報を得る
- ユーザの確認を得る
- tooltipを加える方法
- 文字コードを変更する方法(情報が古い?)
- 動的な画像の重ね合わせを生成する方法
- HTMLタグの属性を修正する方法
- 出力からwicketのマークアップを取り除く方法
- CSSリソースを含ませる
- ListViewとその他の繰り返し - コンポーネントの可変あるいは実行時に決定される数を加える方法
- ログアウト - セッションの破棄とリダイレクト
- マークアップの継承 - マークアップの継承を使って一貫したレイアウトを実現する方法
- ページごとに複数マークアップ - 一つのPageが関連する複数のマークアップページを持つ方法
- URLの難読化 - wicketのURLを難読化/暗号化する方法
- フレームを使う
- ページにつき一つ以上のFeedbackPanelを使う