Mayaa で Map を使う

別に何てこと無いことなんだろうけど便利でうれしかったのでメモ。

Javaファイル

public Map<String, String> label = new HashMap<String, String>();
label.put("y", "はい");
label.put("n", "いいえ");

public String ans = "y";

HTML

<span m:id="answer">こたえ</span>

Mayaa

<m:write m:id="answer" value="${ label.get(ans) }" />

気がつきたいコード

後輩に頼んでおいたコードをレビューしていたときに気がついたことがあったのでメモしておく。

後輩にお願いしたコードはどういうものか

  • 日付のバリエーションチェック:yyyy/MM/DD,HH,mm
    • yyyy/MM/dd:年月日
    • HH:時間
    • mm:分
  • 年月日は JavaScript で作成されたカレンダーを選択することでテキストに入力(上記の形式でサーバに飛んでくる)
  • 時は select を使い、option の値は0〜23まで
  • 分も select を使い、option の値は5刻みで0〜55まで
  • これらはDateに変換され Timestamp 型でデータベースに保存される

後輩はどのようなバリエーションチェックを実装したのか

  • 必須:全項目が入力されているか
  • 長さ:
    • 年月日 → 10桁
    • 時間、分 → 2桁
  • 文字種:
    • 年月日 → 半角数字とハイフンのみ
    • 時間、分 → 半角数字のみ
  • 形式:
    • 年月日 → "yyyy/MM/dd" になっているか
    • 時間、分 → チェックなし

これの何に引っかかるのか

このバリデーションチェックは機能している。テストケースにパスするし、組み込んで画面から打鍵してもちゃんと不正な値を捕まえてくれる。処理的には問題が無いコード。
なのだが引っかかる。こういうチェックでもエラーを防ぐことは出来ているがもっと単純にチェックすることが出来る。つまり、最終的にこれらは日付になって欲しいのだ。そこを抑えていると、こういうエラーチェックにはならない。

「入力内容を日付に変換する」

これだけ確認すればいい。
後輩のロジックでも確かに問題なく機能する。しかし、対応すべき問題の本質に気づけば、もっと単純なコードになるはずだ。

Mayaa で文字列の isNotNullAndEmpty

<m:if id="isNotNullOrEmptyXXX" test="${ XXX != null &amp;&amp; XXX != '' }" />

これを応用して、「郵便番号が格納されている場合は『〒』を表示する」のロジックはこんな感じになる。

<m:with m:id="zipCodeMark">
	<m:if test="${ zipCode != null &amp;&amp; zipCode != '' }">
		<m:write value="〒" />
	</m:if>
</m:with>

月曜日に仕事を休むと

「一昨日、昨日と休みだったのに体調悪いってどうよ?」とか言われてしまう。
ホントにしんどかったら仕方ないと思うが、月曜出勤 → 体調悪いをアピール → 火曜休みってほうが理解が得られるかな、と。