m-namikiの日記

おもしろき こともなき世を おもしろく

詳細画面の表示

昨日の続きで、一覧画面から詳細画面へのリンクをクリックした場合の処理を作成。画面の流れをCubbyのTodoアプリに似せたかったので、一覧から編集画面へのリンクは外した。

<!-- employeeList.html -->
<div id="employeeList">
  <tr id="employeeLine">
    <td><span id="employeeNo">1</span></td>
    <td><span id="name">aaa</span></td>
    <td><span id="userId">bbb</span></td>
    <td><span id="email">aaa@example.com</span></td>
    <td>[<a id="detail" href="/employee/detail">詳細</a>]</td>
    <td>[<a id="delete" href="/employee/delete">削除</a>]</td>
  </tr>
</div>
<!-- employeeList.mayaa -->
<m:echo m:id="detail">
  <m:attribute name="href" value="${request.getContextPath()}/employee/detail/${employee.employeeNo}"/>
</m:echo>
<m:echo m:id="delete">
  <m:attribute name="href" value="${request.getContextPath()}/employee/delete/${employee.employeeNo}"/>
</m:echo>
<!-- 実行後のHTMLソース -->
<tr class="even" id="employeeLine">
  <td>115</td>
  <td>鈴木一郎</td>
  <td>i-suzuki</td>
  <td>suzuki@example.com</td>
  <td>[<a href="/sspj/employee/detail/115" id="detail">詳細</a>]</td>
  <td>[<a href="/sspj/employee/delete/115" id="delete">削除</a>]</td>
</tr>

ActionクラスのソースはTodoActionとほとんど変わらないけど、一応。

@Path("employee")
public class EmployeeListAction extends Action {
	/** 社員情報List */
	public List<User> employeeList;
	/** 対象社員番号 */
	public int employeeNo;
	/** 対象ユーザー情報 */
	public User selectUser;
	/** ユーザー情報サービス */
	public UserService userService;
	/**
	 * 社員情報一覧画面初期表示処理(/employee/)
	 * @return
	 */
	public ActionResult index() {
		this.employeeList = userService.selectAll();
		return new Forward(SSPJConstants.EMPLOYEE_PAGE);
	}
	/**
	 * 社員情報詳細画面表示処理(/employee/detail/{employeeNo})
	 * @return
	 */
	@Path("detail/{employeeNo,[0-9]+}")
	public ActionResult detail() {
		selectUser = userService.selectById(employeeNo);
		return new Forward(SSPJConstants.EMPLOYEE_DETAIL_PAGE);
	}
}

次は詳細画面を、と思ったけど、ここまで書いておいて実はサンプルと結構違っていることに気が付いた。
というのはサンプルではDxoを経由してエンティティモデルの情報をActionに保持させて、詳細画面ではActionから値を取得しているけど、自分のはエンティティモデルをそのままActionのpublicフィールドとして保持して、詳細画面からは${action.selectUser.employeeNo}みたいな形で取得している。確かに最終的に画面に表示される値は一緒になるけど、思想が違ってる。プロトタイプだから動いてれば良いじゃんと放置する手もあるけど。。。いや、プロトタイプだからこそ、そこの部分がぶれるのが嫌なので、これは直そう。ついでにDxoの使い方の勉強にもなるし。
という訳で、ここまで書いてなんだけど、明日以降に修正しよう。うー、バカだー。

今後

なにはともあれ、徐々に形になってきたので、今後どうするかを考えてみる。取り敢えず今日のアレは修正。あと機能として実装するのは新規登録、編集、削除か。あー、CubbyのTodoアプリには検索もあったから、それも必要だね。それで一通りのCRUD処理は流れることになるから、プロトタイプとしてはこんなもんかな。実装し終わったら会社の人に送りつけてみよう。
プロトタイプ云々は別として、ファイルアップロードしてそれを基に社員情報の追加とか、登録されている社員情報をCSVファイルにしてダウンロードなんてのも面白そうだ。それに今はDB使ってないから、DB使ってS2Dao使ったバージョンも作りたいな。後は実案件だといわゆる非機能要件と言われる部分(URL直叩き対策とかセキュリティ対策とか)も必要になってくる。そこはAOPで対処出来そうな気がするけど、AOP自体イマイチよく分かってないので、それもまた勉強しないと。それにそもそもCubbyソースコードをほとんど読んでないから、それもやりたいし。いい加減Subversionも入れないと後悔しそうだし。うーん、やりたいことが沢山あって嬉しい悲鳴だ(^^;