職場実習22日目

今日は疲れが出たのか、寝坊してしまった。(汗)

作業のほうは、それほど切羽詰まってはいないので、レビューに支障を来すような遅れにならずに済んだけど。

気を取り直し、引き続きGrails作業を行う。
明日までにキチンと動くようにするため、ログイン管理やメッセージ部分などの不具合をどんどんつぶしていく。

カレンダーのyears指定で変数が使えない問題について

引き続き色々な方法を試した結果、years属性は"first,last"という書式で、firstには始点となる年を、lastには終点となる年を、それぞれ数字で書く必要があり、firstの部分は変数展開できるものの、lastの部分はどうやっても変数展開できない事が分かった。
また、現在日時を得て、それをそのまま使ったり、年だけを使ったりするのに、予めg:setタグを使って変数に入れておくと、何度も現在日時を取得するオブジェクトを生成しなくて済むので、効率が良くなる。

<g:set var="birthDayNow" value="${new GregorianCalendar()}" />
<g:set var="birthDayLastYear" value="${birthDayNow.get(Calendar.YEAR)}" />
<g:set var="birthDayFirstYear" value="${birthDayLastYear - 100}" />
<calendar:datePicker name="birthDay" defaultValue="${birthDayNow}" dateFormat="%Y/%m/%d" years="${birthDayFirstYear}, 2999"/>

データを追加・更新した後、DBに反映される前に更新後の画面へ遷移し、更新前のデータが表示される問題

最初はブラウザのキャッシュが更新されずに前の画面が表示されたのかと思ったが、操作後のメッセージは表示され、更新ボタンを押すとデータも更新後のものに変わるので、DBの更新とタイミングが取れていないのではないかと推測し、その事で社員の芳村さんに相談した所、DBの更新と画面遷移は同時に行われるため、更新前のデータが更新後の画面に表示される事があるという事を教えてもらった。防ぐ手立ては無いらしい。
その後、いつも一緒に作業している研修生のK君にその事を話したら、ビューで表示するデータを取得するタイミングによっては、更新前のデータを表示してしまう事もあると言われ、それを防ぐためにデータ更新時に強制的にDBにデータを反映するためにflushオプションを指定する方法を教えてもらった。
ドメインインスタンスのsaveメソッド、deleteメソッドを使用する際、引数として「flush:true」と指定すればいいらしい。

def authorInstance = new Author(params)
if (!authorInstance.hasErrors() && authorInstance.save(flush:true)) {
    flash.message = "author.created"
    flash.args = [authorInstance.name]
    flash.defaultMessage = "Author ${authorInstance.name} created"
    redirect(action: "show", id: authorInstance.id)
}
authorInstance.delete(flush:true)
flash.message = "author.deleted"
flash.args = [author_deleted_loginId]
flash.defaultMessage = "Author ${author_deleted_loginId} deleted"
redirect(action: "list")

ただし、このバグ自体、再現性の低い偶発的なもののため、この方法で完全に消えるかどうか分からない。

一度他のPCから閲覧してもらい、感想をもらう

他のPCからのデータ閲覧や、データの追加・更新・削除が正常に行えるか、社員の金村さんのPCからサイトへ繋いでもらい、チェックしてもらった。
その結果、サイトへ問題無く繋ぐ事ができた。
しかし、いくつか問題点が見付かり、アドバイスをもらった。

  • セキュリティ上の問題点
    • 作成者のログインIDをニックネームとして使うべきではない。
  • プライバシー上の問題点
    • 作成者以外が、作成者の住所、電話番号等を閲覧できないようにすべき。
    • メールアドレスは公開・非公開を選べるようにする。

メールアドレスの公開設定を付けると、ドメインを書き換えたり、入力画面などを変える必要が出てくるので、公開・非公開の切り替えは実装せず、作成者情報を表示する画面で、管理者と作成者本人以外に住所・電話番号、メールアドレスが見られないようにした。
(始めから公開情報であると断っておき、ユーザーの判断で入力してもらったり、空欄のままにしてもらう事も可能ではあるが。)

明日は職場実習最終日。