検索画面を簡単に実現するには? | Java Springの逆引きメモ

Java Springの逆引きメモ

JavaのSpring frameworkのメモを書いていきます!
初心者の勉強ノートなので間違いがあるかもしれませんが、何かヒントになることがあれば幸いです。

ここでの記事は、StrutsとSpringJDBCをうまく連携させる工夫です。

やろうとしていることは以下のことです。


検索の入力画面があって、いくつか検索キーがあります。

それらのキーを受け取ってDaoの呼び出し、画面に結果を表示します。

プログラム的には以下のことをしないといけません。


 ①パラメタの妥当性チェック(StrtusのValidatorが行います)

 ②パラメタをActionFormから一つずつ受け取って、Daoのメソッドの引数に1つずつ設定していきます。

 ③Daoでは、パラメタを一つずつ受け取って、SQL文に一つずつセットします。


意外と面倒だと思いません?

しかも、検索キーが増えると様々な箇所に影響がありそうです。


①はStrutsが行ってくれるので、②と③についてもう少し拡張性が高く、

簡単で見通しがよい方法を見てみましょう。



【前提】

基本思想は、以下のDaoの記事にありますので、まずこちらをお読みください。


・NamedParameterJdbcTemplateをうまく使うには?



上の記事では、検索キーをクラスにすることで、型を分かりやすくし、

SpringJDBCとの連携もスムーズにする工夫を書いています。


この工夫を行っていることが前提で話を進めていきます。




【HTML画面のサンプル】


検索条件を入力してください。<br>
<html:form action="search.do" method="post">
 ID:<html:text property="id" /><br>
 名前:<html:text property="name" /><br>
 カナ:<html:text property="kana" /><br>

<html:submit value="検索" />
</html:form>



【Struts設定ファイルのform-beanタグのサンプル】

<form-bean name="schMemberKey" type="org.apache.struts.validator.DynaValidatorForm" >
<form-property name="id" type="java.lang.Integer"/>
<form-property name="name" type="java.lang.String"/>
<form-property name="kana" type="java.lang.String"/>
</form-bean>



【StrutsのActionのサンプル】

 public ActionForward execute(ActionMapping mapping, ActionForm form,
   HttpServletRequest req, HttpServletResponse res) throws Exception {
// MemberSearchKey key = new MemberSearchKey();
//コピー PropertyUtils.copyProperties(key, form); List<Member> memberList = this.memberService.findMember(key); req.setAttribute("memberList", memberList);
return mapping.findForward("search");
}

Daoは以下の記事を参照。
・NamedParameterJdbcTemplateをうまく使うには?


【説明】

使用したいDaoのメソッドは、引数がMemberSearchKeyクラスになっています。

ですので、Actionのexecuteメソッドではそのクラスを作成して値を設定すれば処理終了です!


Apache Commonsでは、PropertyUtils.copyPropertiesというメソッドが用意されています。

これは、ActionFormから値をコピーするのです。

このとき、ActionFormのプロパティ名とコピー先のプロパティ名が一致するものをコピーします。

ここでは、key にActionForm の値をコピーしています。

 PropertyUtils.copyProperties(key, form);


ですので簡単に言うと、html画面の中のパラメタをMemberSearchKeyへコピーしてくれます。

なんとこれだけで終了です。


あとはDaoでkeyを受け取って、よきに計らってくれます!



ね。簡単になりましたよね。



MemberSearchKeyを使用するやり方の補足】

上記の方法のよいところは、あとで検索キーが増えたときも変更が容易ということはもちろん。

型の安全性も保持しているところです。

Daoのメソッドは、Strutsだけでなくバッチ系の処理でも使用する可能性があります。

Strutsだけなら、上記の方法で型が分からなくても困りません。

でも、他で使用するときは、ピリオドを押したときにeclipseがsetterを補完してくれるので

分かりやすいです。

これは地味に見えますが、システムが大きくなって機能が増えるほど威力を発揮します。

開発効率が上がるのと、間違いが減るので有用な方法だと思います。





参考:

Strutsと連携するには?(理論編)

・SpringJDBCの機能について

・NamedParameterJdbcTemplateをうまく使うには?