Wicketのそこそこ美しいと思われる使い方

 Mapインターフェイス+PropertyModelを使うといい感じに入力値を受け取れる。
 そのクラスへメソッドを実装すれば、パラメータがセットされた状態で実行できるため、きれいに見える。

CalcPage.java
public class CalcPage extends WebPage {
  private Form<ICalc> form = new CalcForm();
  
  protected void onInitialize() {
    super.add(form);
  }

  private static class CalcForm extends Form<ICalc> {
    @Inject
    ICalc calc;

    private final TextField<Integer> arg1 = new TextField<Integer>("arg1", Integer.class);
    private final TextField<Integer> arg2 = new TextField<Integer>("arg2", Integer.class);
    private final TextField<Integer> result = new TextField<Integer>("result", Integer.class);

    private CalcForm() {
        super("form");
    }

    protected void onInitialize() {
      this.arg1.setModel(new PropertyModel<Integer>(this.calc, "arg1");
      this.arg2.setModel(new PropertyModel<Integer>(this.calc, "arg2");
      this.result.setModel(new PropertyModel<Integer>(this.calc, "result");
      super.add(this.arg1, this.arg2, this.result);
    }

    protected void onSubmit() {
      this.calc.calculate();
    }

    private static final long serialVersionUID = 1L;
  }
  private static final long serialVersionUID = 1L;
}
ICalc.java
public interface ICalc extends Map<String, Object> {
    void calculate();
}
CalcImpl.java
public class CalcImpl extends HashMap<String, Object> implements ICalc {
    public void calculate() {
        Integer arg1 = (Integer) super.get("arg1");
        Integer arg2 = (Integer) super.get("arg2");
        super.put("result", arg1 + arg2);
    }
}

昼食後

maven2のビルドではまった。resources以下にないファイルは、自分で設定してあげないと配置してくれない。IMarkupSettings.setDefaultMarkupEncodingが重要。どっちもきちんと理解していればはまるようなところではないな。反省反省反省反省。

 しかしですよ、Eclipseプラグインから起動したときは動いたんですよ。プロジェクトのプロパティからソースコードエンコーディングを取得してよろしくやってくれてたってことかな。

引き続き昼食後

初めてjMockを使ってみたが、ここまでテストコードが簡潔になるとは思っていなかった。最近はGuiceでDIしまくりなので、ここにきてその恩恵が発揮されつつある。

「DIとかJUnitとか、大規模開発案件でやればいいデスヨ」なんて思ってた自分がいました。最近の開発で単体試験ツールにだいぶ馴染めたので良かった。JUnit4、DBUnit、WicketTester、jMockなど。Wicket + Guice + MyBatisの構成が趣味にバッチリはまった。これで3年は戦えるだろう(飽きないという意味で)。

寝る前にぼんやりしながら(1)

変数名にしろ、メソッド名にしろ、うまく名前をつけられるとプログラムがぐんと読みやすくなる。Javaを勉強し始めた時は、is○○メソッドを見て「おお!」と感激したのを覚えている。この感動はオブジェクト指向言語でないと得られないんだよなあ。 http://d.hatena.ne.jp/shunsuk/20110926/1317033011

寝る前にぼんやりしながら(2)

マネジメントもそれはそれで立派なスキルだとは思うのですが、「プログラムなんか書いてちゃいけない」などとプログラマの前で発言し、やる気を削ぐようなマネージャーはどうなのかと。進捗管理のために作業を妨害するようなプロマネはどうなのかと。っへ。 http://www.class.co.jp/column/20110726.html

寝る前にぼんやりしながら(1)

すすめられてLibreOfficeを使ってみたものの、使いこなせずに挫折。どこで挫折したかというと、図形の線の太さを指定するところ。Webで画面を作るときはいつもpxで指定するけど、cmでしか指定できなさそうだった。紙で下書きをしてからDrawを使うなら、cmのほうが便利なんかな

Inkscapeのほかの用途としては、旅行に行く時にパンフレット(チラシ)を作ったりしてます。けっこうおもしろいよ。

寝る前にぼんやりしながら(2)

今日はDatabaseTesterの日。FlatXmlDatasetを量産した。テストメソッド一件につき1ファイルで臨んでいるが、果たしてこれはまっとうな使い方なのだろうか。問題があったとしても、Greenをキープしておけばテストケース側をリファクタリングすればよい。NPNP!!

テストケースと本番コードが互いに補完するという話。すばらしい。

夕食後、のんびりしながら

今回の開発では画面デザインにInkscapeを採用。HTMLでは修正にコストがかかりすぎる。特に四角が入り組んでいると大変。Excelで四角を並べたりもしたが、拡大縮小を繰り返すとぐちゃぐちゃになる。lnkscapeなら問題なし。さすがはベクターグラフィック。結構重いのが悩ましい

 Inkscapeに合わせてCSSで幅やら高さを設定してったら、テーブルレイアウトが一致したよ!当たり前といえばそうなんやけど、実際に体験するとすごい!

出社後、足をさすりながら

 朝から自転車ですべって転んだ。風にあおられたわけでも、道路が濡れていたわけでもない。ただ単に曲がるときに減速していなかっただけだ。恥ずかしい。途中、庄内川を渡ってきたが、普段に比べると増水しており、水も濁っていた。川べりの自動車学校が一時水没したらしいが、橋からではわからなかった

例外処理対応後

 ExceptionHandlerの設定がようやく完了した。struts-config.xmlを使えばいいというのはすぐわかったが、keyとpathの設定に戸惑った。keyはapplication.propertiesに定義、pathは/WEB-INF/から