2012年2月15日水曜日

Slim3 Source Code Reading #8

Slim3 Source Code Reading #8を開催しました。

先に言っておくと…
今回はJSPを読むのみで終わってしまいました。Seasarを使っている人には「ほぼ常識」と言わんばかりの内容しかないと思いますが、よろしければ読んで頂ければと思います。

ちなみに、私に取っては新発見のものもあって、適用しようと思っています。

jspで記述する場合はf:h()など"f:"を付けて呼び出します。

h()
h()は引数がString型の場合は、エスケープして出力します。Keyの場合はKeyFactory.keyToString()の結果が出力されます。
String、Key以外の型の場合は引数.toString()が実行されます。
したがって、エスケープの必要がある場合は、必ずh()を使いましょう。

url()
引数に":"が含まれる場合はそのまま出力します。(恐らく、URLが書かれていると判断する)
ここでハマったのですが、中でrequest.getContextPath();を取得しています。
これはコンテキストパスを取得するのですが、GAEだとコンテキストルートの設定が
ないので、必ず空になるのでは?という疑問がでました。
実際、開発環境でTwitterサンプルを動かして、中身を見てみたのですが、やはり空でした。
必ず空になるなら無視しても良いような気もするのですが、疑問が残ったままとなりました。
処理としては、":"が付いていればそのまま返す(URLが書かれている)
引数が空の場合、
requestの中に"slim3.basePath"が含まれていれば、その値を、
含まれていなければ、サーブレットパスを取得し、
コンテキストパス+取得した値を連結して返す。

引数の先頭が"/"で始まっている場合、
コンテキストパス+引数を連結して返す。

空でもなく、先頭が"/"で始まらない場合、
コンテキストパス+"slim3.basePath" or サーブレットパス+引数の値を連結して返す。
返すURLはエンコードされたURLになる。

blobstoreUrl()

BlobstoreServiceからBlobStoreへのアップロードURLとリダイレクト先URLを設定した
URLを返す。リダイレクト先URLの生成ルールはurl()と同じ。
※このメソッドではコンテキストパスを取得していない。

nbsp()
空白を に置き換える。

br()
改行を<br />に置き換える。¥r¥n→¥n→¥rの優先順位で置き換える。
エスケープと改行、空白の変換を全て適用したい場合は、
f:br(f:nbsp(f:h(contents)))としないといけない。brとnbspが入れ替わるとおかしくなる。
f:hを最後にしても<br>がでてしまうのでNG。

locale():ロケールを取得
timeZone():タイムゾーンを取得

text()
引数で指定したnameに対する値をrequestから取得し、name="key" value="value"という文字列を出力する。valueの方は値がエスケープされる。inputタグなどで利用すると便利
※XXXArrayという名前だと例外が発生する。

hidden()
中身はtext()

checkbox()
checkboxで利用する。
引数で指定した名前がrequestに存在すればchecked属性が付加される。
※XXXArrayという名前だと例外が発生する。


multibox()
複数のcheckboxで利用する。value="value"が付加される。値はエスケープされる。
引数で指定した名前がrequestに存在し、引数で指定した値が存在すればchecked属性が付加される。requestのにはListを入れておかなければならない。Listでなければ例外が発生する。
※XXXArrayという名前でなければ例外が発生する。

radio()
radiobuttonで利用する。value="value"が付加される。値はエスケープされる。
引数で指定した名前がrequestに存在し、引数で指定した値が存在すればchecked属性が付加される。
※XXXArrayという名前だと例外が発生する。

select()
optionタグで利用する。value="value"が付加される。値はエスケープされる。
引数で指定した名前がrequestに存在し、引数で指定した値が存在すればselected属性が付加される。
※XXXArrayという名前だと例外が発生する。

multiselect()
複数選択時のoptionタグで利用する。value="value"が付加される。値はエスケープされる。
引数で指定した名前がrequestに存在し、引数で指定した値が存在すればselected属性が付加される。
※XXXArrayという名前でなければ例外が発生する。

errorClass()
引数で指定した名前のvalidationのエラーがあれば、
引数で指定したCSSクラス名を設定する。
エラーがなければ空を返す。

errors()
validationのエラーなどを出力する。検証エラー全てが表示される。

key()とhiddenkey()はDeprecatedとなっています。
それぞれ、h()かhidden()を使いましょう。

request()
protectedのメソッドなので直接利用する事はありませんが、
HttpServletRequestオブジェクトを取得しています。

後は、JavaScriptの話題になりましたが、私もまだまだJavaScriptのスキルが足りないようなので、微妙な感じで終了しました。

私のWebの技術が普通の人レベルになるにはまだまだ遠いようです。

次回のSlim3 Source Code Reading #9は2/21(火)です。
ModelRefとtesterを読み進める予定です。
ご興味がありましたらどうぞ。