2018年以降の記事はGitHub Pagesに移行しました

Wicket勉強会に参加しました

TwitterのTL取得ページを自分用に作った程度ですが、二年連続二回目の出席をキメました。バージョン1.3メインで使っていた(いる?)人なので、もう1.5が出るのかーっといったところです。

1.5になると矢野さんのWicket本の1/3が意味なくなるらしい…。

Wicket1.5の新機能 @t_yanoさん

  • WebRequestCycleが消えた
  • steps(), step()も消えた
    • RequestTargetという概念が消えた→IRequestHandlerで代替
  • UrlCodingStrategy→IRequestMappterで代替
  • リクエストのサイクル
IRequestHandler
 ↑    ↓
--------------------
IRequestMapper
--------------------
 ↑    ↓
Request      Url
  • RequestHandlerを使えればWicketの世界に入っていける
  • RequestHandlerStack: リクエスト処理の中心でRequestHandlerをスタックとして扱う
Urlマウント
  • mountBookmarkablePageが消え、代わりにmountPageになった。
  • ${}で変数をUrlに埋め込めるようになった
/mountpath/${year}/

StringValue year = parameter.get("year")
    • 現状はページのみ。リソースの場合はインデックスで取れる
/user/t_yano/image/

parameter.get(0) //user
parameter.get(1) //t_yano
コンポーネントの初期化と設定
  • コンストラクタ?onBeforeRender?
    • onInitialize()が追加された
      • 自身がページにadd済みである事を保証。ただし一度しか呼ばれない
      • isVisibleがfalseだったりすると呼ばれない
    • onConfigure()
  • ButtonとかLinkとかPanelに書くもので、Pageに書くものではない
コンポーネントの独立性
  • IEventSink: イベントを受け取るオブジェクト
  • IEventSource: イベントを送信できるオブジェクト
  • Page#sendで送れる範囲
    • BREADTH: 子に広げる
    • WIDTH: 子から自分まで上がる
    • BUBBLE: 自分から親に上がる
      • BREADTHしか使わないんじゃないか?
◯     ◯  ◯  ◯
↓イベント ↑  ↑  ↑
フ レ ー ム ワ ー ク

最終的な表示処理は誰のもの? @hayasshさん

  • Wicket歴4年
  • 40人以上のプロジェクトでWicketを使っている
こんなときどうするか
  • 住所を一行で表示
  • 郵便番号はXXX-XXXX
  • 郵便番号と住所は半角スペースひとつあける
    • 郵便番号にハイフンを入れる、半角スペースあけで表示するというのは表示側の都合
上記の処理をWicketのどの部分でやるか??
  • Component部分でやるか
    • 再利用性が高くなる
    • 拡張性も保たれる
    • テスタビリティが低い
    • WicketTesterを使用しなければいけない
  • Comverterでやるか
    • Componentよりテスタビリティが高い
    • 変換処理だけ考えるので責務がはっきりする
    • Stringへの変換しかしない
    • Nullの場合にConverterが適用されない
  • ViewHelperでやるか
    • テスタビリティが高い
    • 概念が理解されやすい
    • CompoundPropertyModelと相性がいい
    • 再利用性・拡張性が悪い
入力があればConverter。表示するだけならModelでなんとかする?再利用単位はコンポーネントがいい?
まとめ
  • Componentで行えば再利用性が高まる?
  • ただし、ViewHelperはJUnitでテストができる

タイトル未定 @tetsuyasさん

Shuugi.inサイトでの事例
  • 更新すべきパネルをもち回している。
  • OAuth
    • Twitter
      • Twitter4j
    • はてな
      • oauth-signpostを利用
      • OAuthConsumer,OAuthProviderをもち回す
  • ModalWindow内でのページ遷移

Wicket1.3から1.4へのマイグレーション時にハマった事 @gishi_yamaさん

  • 大学の教員をやっている
  • 学内のシステムをWicketで開発
構成
マイグレーション
  • エラー350近く、ワーニングは5000近く
    • エラーの原因はメソッドの廃止によるものがほとんど
    • ワーニングはジェネリクス、Validator
工数
  • 300クラス/3.2万ステップ
  • 社内SE2人でコード修正、確認など…80H
マイグレーションで注意
  • CompundPropertyModelを使用したFileUploadFieldコンポーネント
    • FileUploadFieldにModelを指定しないとエラーになる
  • ModelをセットしないLinkやFormに対するジェネリクス
    • Linkにする
  • htmlの書き換え
    • xmlnsを1.3から1.4にかえる
  • 1.4からのコンポーネントに置き換え
    • EnumLabel,onConfigure(),onInitialize()など
  • 1.3から1.4で仕様変更したコンポーネント
changelogとかWicketTesterを使いこなせば…

PropertyModelクラスがオブジェクトのフィールド変数を取得する仕組みについて ravicotさん

アクセサがないのにどう取得しているのか?
  • リフレクションを使っていた
  • 動的にアクセサを使用していた
  • PropertyResolver.getValueを使用している
    • フィールドを取得してアクセサがなければアクセサ作成を試みる!

Wicket:idを利用しないテンプレートとの対応付け @madogiwaさん

html5だとwicket:idタグは警告される
警告を消すには…
  • xmllnを追加する
  • wicket:idを使わなければいいじゃない!
どうする
  • 何か意外と簡単にできるらしい…これはやってみたいかも

WicketFlexの連携 @chimerastさん

W→F
  • FlexのcreateComplete内でaddCallbackを呼び出し、jsリストに関数を追加
  • そしてWicketから呼び出す
F→W
  • AbstractDefaultBehavior#renderHead()をオーバライドしjs関数を追加
  • Flexから追加した関数を呼び出す
テキストエンコーディング
  • F→js
    • 特に問題なし
  • js→W
    • endodeURIComponent()

感想とか二次会とか

大学時代に作ったWicketの遺産が発掘されたので、これ、1.5にあげてみたいと思うなど。何かLTのネタでもできるようにWicketを使っていきたい。

その後の二次会では主にPHPとかWindowsとかOfficeがディスられてました。また、今回はATNDでのアテンドなのに出席率がめちゃめちゃ良かったとの事でした。

最後に

長い時間受付をして下さったyoshioteradaさん、会場を提供して下さった日本オラクルさんありがとうございました!