質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Struts

StrutsはJava向けのWebアプリケーションフレームです。MVCモデルに基づいており、JSPやJavaサーブレットを組み合わせ、アプリケーション構築時に使用する各機能を提供しています。

Q&A

解決済

1回答

1997閲覧

struts1 mapを効率よくアクセサメソッドにセットしたい

ajijek

総合スコア16

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Struts

StrutsはJava向けのWebアプリケーションフレームです。MVCモデルに基づいており、JSPやJavaサーブレットを組み合わせ、アプリケーション構築時に使用する各機能を提供しています。

1グッド

0クリップ

投稿2016/11/29 08:26

いつもお世話になっております。
下記コードでSQLを取得した結果をActionFormのセッターメソッドにセットし、
画面に表示したいのですが、DBから取得したカラム数が50個近mapから取得し
setterにセットする記述を50個程度作らないと思います。それは良いのですが、
必然だと思うのですが、daoから取得したmapをスマートにセッターにセットする
方法などありませんでしょうか?

よろしくお願いいたします。

java

1Daoクラス 2 3public static Map<String,String> getTest( DBAccess db, String sql ) throws Exception { 4 5 DBAccess.QueryResult ret=null; 6 LinkedHashMap<String,String> map = new LinkedHashMap<String,String>(); 7 8 ret = db.executeQuery( sql.toString() , null ); 9 10 ResultSet rec = ret.getResult(); 11 ResultSetMetaData md = rec.getMetaData(); 12 int columns = md.getColumnCount(); 13 14 while (rec.next()) { 15 for (int i = 1; i <= columns; ++i) { 16 map.put( md.getColumnName(i) , rec.getString(i) ); 17 } 18 } 19 20 21 return map; 22 23} 24

java

1actionクラス 2 3public class userConfirmAction extends Action { 4 5 // DBから画面の項目をdaoから取得する。 6 Map<String,String> test = dao.getTest(db, this.getSql()); 7 8 // アクションフォームにセット 9 _form.setId(test.get("id")); 10 _form.setName(test.get("name")); 11 _form.setTel(test.get("tel")); 12 _form.setAddress(test.get("address")); 13 //......ほかにもsetter続く 14 15}

java

1Actionformクラス 2 3public class userActionForm extends ActionForm { 4 5 private String id = null; 6 7 public String getId() { 8 return id; 9 } 10 11 public void setId(String id) { 12 this.id = id; 13 } 14 //...ほかにも続く 15 16} 17
A-pZ👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

もし利用できるなら、Apache CommonsのBeanUtilsを使ってpopulate(bean, map)すると、
mapの値がbean(に、限らずgetter/setterメソッドを持つオブジェクト)に使えると思います。

利用できない環境なら、リフレクションで

Method[] methods = beanObj.getClass().getMethods(); //取得メソッド群で繰り返し for (Method method : methods) { //メソッド名のsetを除外した名前がマップのアイテム名に一致したら //メソッドの第一引数を対象に、型を取得 //メソッド引数の型とマップの値の型を気にしながらinvokeで流し込む }

みたいな、人柱ソースを1本書き、値を投入するのが、ソースコード量が最も少ないかと。
後者は、私の知識ではクラスの判定がちょっとうっとおしいのでお勧めしません。

投稿2016/11/29 09:35

akio221

総合スコア716

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問