「DREAM」旗揚げ戦のルール明文化に

「足の裏以外が1点でもリングに接した状態=グラウンドポジション」と明文化。その上で、立った選手のグラウンドポジション選手の頭部、顔面への蹴りや踏みつけは禁止(ひざ蹴りは可)などと決まった。

ルールが明確になるのはとても良いこと。


素朴な疑問なのだが、一応スタンディングポジションである
うんこ座りで構えて、相手が顔面を蹴ろうとした瞬間に地面にサッと手を付けて、
グランドポジションに移行した場合は、相手は反則になるのだろうか?(笑)

アクションがアクションフォームになる

まさに「忍法身代わりの術」。
SASturtsのアクションは、自分自身のプロパティにアクションフォームが
存在しなければ、自分自身がアクションフォームとして振舞うようです。
> Thanks id:jflute さん


なるほど。だから、アクションに定義したプロパティが
JSPから参照できる訳ですね。


実際には、SASturtsのS2ActionMapping.java にその仕組みが記述されていました。

    public Object getActionForm() {
        Object action = getAction();
        if (actionFormPropertyDesc != null) {
            return actionFormPropertyDesc.getValue(action);
        }
        return action;
    }


実際にアクションフォーム用の特殊メソッドであるリセットメソッドを
アクションに用意したらちゃんと呼ばれました。(ちょっとビックリ)
(リセットメソッド: http://sastruts.seasar.org/featureReference.html#ResetMethod)


個人的には、アクションにアクションフォームのプロパティを
定義したとたんに、アクションのアクションフォーム以外の
プロパティがプロパティとして機能しなくなる仕様は気に入っていません。
JSPがアクションにあるプロパティを見てくれなくなる。)


理由は、スコープがリクエストのプロパティはアクションに記述し、
スコープがセッションのプロパティはDto(アクションフォーム)に
記述というような割と直感的な実装方針を素直に実現できないからです。


追記
id:higayasuo さんのコメントによると、私の理解が正確でなかったです。

ActionFormを使ったときの、リクエストのプロパティは、readonly(更新系の機能は使えない)です。
なぜなら、更新は、ActionFormに対して行なわれるからです。


Dtoをアクションフォームにしないで、スコープをセッションに
する方法もありますが、リセットメソッドが使えないのが難点。


例えば、ページング処理の実現において、チェックボックス
指定された検索条件をString配列型プロパティとして、
スコープはセッションで保持するケースを想定します。
このケースの問題は、チェックボックスが未選択の場合に、
リクエストには何も値が送られてこないので、
セッションで保持している以前の値が表示されてしまうことです。
その対策として、リセットメソッドの仕組みが用意されているのですが、
Dtoをアクションフォームとして定義していないと利用できません。


一応、アクションに定義したリセットメソッドからアクションフォームじゃないDto
定義したリセットメソッドを呼ぶことで、なんとか問題を回避することはできました。
しかし、あまりスマートじゃないコードになってしまったので、手軽に扱いたいものです。


そこで、アクションフォームじゃないDto内のメソッドに
@Resetアノテーションを付けると、
そのメソッドがアクションフォームのリセットメソッドと
同じタイミングで呼ばれるような機能があるといいなぁ、
と書いてみる。