Strutsでの質問

このQ&Aのポイント
  • Strutsでの質問について悩んでいます。実装の方法がわからず困っています。
  • ActionFormやActionの定義方法について教えていただきたいです。
  • サイトをいくつか参考にしてみましたが、よくわかりません。参考URLを教えていただけると嬉しいです。
回答を見る
  • ベストアンサー

Strutsでの質問

Strutsでの質問 いつもお世話になっております。 <html:optionsCollection>使った際の実装のさせ方がわからない為、困っております。 birthday.jsp //省略 生年月日 <html:select property="year" > <html:optionsCollection name="UserCheckForm" property="year_map" value="key" label="value" /> </html:select>年 <html:select property="month" > <html:optionsCollection name="UserCheckForm" property="month_map" value="key" label="value" /> </html:select>月 <html:select property="days" > <html:optionsCollection name="UserCheckForm" property="days_map" value="key" label="value" /> </html:select>日<br/><br/> ActionForm、Actionではどのように定義しておけばいいのでしょうか? ActionFormでは //省略 LinkedHashMap<String, String> year_map = new LinkedHashMap<String, String>(); year_map.put("01", "1970"); year_map.put("02", "1971"); year_map.put("03", "1972"); year_map.put("04", "1973"); year_map.put("05", "1974"); year_map.put("06", "1975"); year_map.put("07", "1976"); year_map.put("08", "1977"); LinkedHashMap<String, String> month_map = new LinkedHashMap<String, String>(); month_map.put("01", "01"); month_map.put("02", "02"); month_map.put("03", "03"); LinkedHashMap<String, String> days_map = new LinkedHashMap<String, String>(); days_map.put("01", "01"); days_map.put("02", "02"); days_map.put("03", "03"); でもこれっておかしいですよね・・・。 ActionFormにはsetterとgetterを実装しなければいけないのに。 setterはこんな感じになるんでしょうか。 public void setYear_map(){ year_map.put("key","value"); } でもこれだと動的にキー名と値が入らず、1個分しか出来ないですよね…。 どうしたらいいかわからないのでどなたか教えて頂ければ幸いです。 また結構なサイトみてますが、イマイチわかりません。 参考URLをご提示の場合はどのへんを参考にすればいいか 教えて頂ければと思います。 申し訳ありませんが、宜しくお願い致します。

  • Java
  • 回答数3
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • kotoby2003
  • ベストアンサー率15% (280/1755)
回答No.3

あと、細かいつっこみですが、 LinkedHashMap<String, String> yearMap = new LinkedHashMap<String, String>(); とありますが、 Map<String, String> yearMap = new LinkedHashMap<String, String>(); と書くのが一般的です。 宣言はできるだけ抽象化しましょう。 そうしておくことにより、たとえば、LinkedHashMapをやめてTreeMapに変えたいときなどに、影響範囲を小さくできます。

theyouth
質問者

お礼

ご回答ありがとうございます。 本当お忙しいところ、教えて頂き感謝しております。 何とか、結果につながるようになりましたのでご報告致します。 ありがとうございました。 今後もご指導、ご鞭撻の程 宜しくお願い致します。

その他の回答 (2)

  • kotoby2003
  • ベストアンサー率15% (280/1755)
回答No.2

Formの初期化は一般的にActionの初期化処理で行います。 なので、記述の内容であっていると思います。 ただ一か所気になるのは、なぜわざわざ request.setAttribute しているのでしょうか? 何か理由があるなら仕方ありませんが、それではStrutsを使っている意味がないです。

  • kotoby2003
  • ベストアンサー率15% (280/1755)
回答No.1

Strutsうんぬんより、Javaが分かっていないだけでは? setterというのは、 public void setYear_map(LinkedHashMap year_map){ this.year_map = year_map; } となります。 Eclipseなどをお使いなら、便利な機能で、setter、getterを自動生成できます。 そもそも、変数名にアンダーバーなんて使っちゃだめです。 推奨されていないという点と、もしかしたらStrutsだと誤動作するかもしれません。

theyouth
質問者

お礼

お世話になっております。 ActionFormとActionを変更してみたのですが ご確認頂ければ幸いです。おかしい部分ご指摘お願いします。 public class UserDateCheckActionForm extends ActionForm{ LinkedHashMap<String, String> yearMap = new LinkedHashMap<String, String>(); LinkedHashMap<String, String> monthMap = new LinkedHashMap<String, String>(); LinkedHashMap<String, String> daysMap = new LinkedHashMap<String, String>(); public LinkedHashMap<String, String> getYearMap() { return yearMap; } public void setYearMap(LinkedHashMap<String, String> yearMap) { this.yearMap = yearMap; } public LinkedHashMap<String, String> getMonthMap() { return monthMap; } public void setMonthMap(LinkedHashMap<String, String> monthMap) { this.monthMap = monthMap; } public LinkedHashMap<String, String> getDaysMap() { return daysMap; } public void setDaysMap(LinkedHashMap<String, String> daysMap) { this.daysMap = daysMap; Actionクラス //省略 UserDateCheckActionForm userCheckForm = (UserDateCheckActionForm)form; LinkedHashMap<String,String> yyyyMap= userCheckForm.getYearMap(); for(int i =1; i <=30; i++){ for(int j=1970; j<=2000; j++){ String key = String.valueOf(i); String value = String.valueOf(j); yyyyMap.put(key, value); } } LinkedHashMap<String,String> mmMap= userCheckForm.getMonthMap(); for(int i =1; i <=12; i++){ for(int j=1; j<=12; j++){ String key = String.valueOf(i); String value = String.valueOf(j); mmMap.put(key, value); } } LinkedHashMap<String,String> ddMap= userCheckForm.getDaysMap(); for(int i =1; i <=31; i++){ for(int j=1; j<=31; j++){ String key = String.valueOf(i); String value = String.valueOf(j); ddMap.put(key, value); } } request.setAttribute("yyyyMapDate", yyyyMap); request.setAttribute("mmMapDate", mmMap); request.setAttribute("ddMapDate", ddMap); return mapping.findForward("success"); このような感じにしてますがどうでしょうか? 生年月日なのでfor文でループさせて同じ処理をしてますがどうでしょうか。 自分でもテストを行ってみたいと思います。 ご指摘頂ければ幸いです。 宜しくお願い致します。

theyouth
質問者

補足

ご回答ありがとうございます。 確かにご指摘の通り、勉強不足でして、今必死に勉強させて頂いてる所です。 この場合も普通にsetter、getterを作るだけでよいのでしょうか それが気になってしまって・・・。 Mapのputはどこでしたらいいのでしょうか? Actionでしょうか。この課題にずっと取り組んでるわけですが もう何が何だかよくわからなくなってきてしまいまして…T_T アンダバーの件は今後使わないように致します。

関連するQ&A

  • Java struts プルダウン

    JAVAでプルダウンを作成しています。 しかしプルダウンの値を設定し、submitを掛けると全ての行のプルダウンの値が同じになってしまいます。 100円 200円 でsubmitを掛けると 200円 200円 になってしまう。 <logic:iterate id="element" name="ActionForm" property="GridList" indexId="idx"> <html:select name="ActionForm" property="selectData" style="margin-left:10px;"> <html:optionsCollection name="element" property="DropDownList" label="label" value="value" /> </html:select> </logic:iterate> selectDataはStringの配列です。 DropDownListにはlabelとvalueのプロパティを持ったBeanを格納しています。 selectDataには「100-150-1日」というハイフン区切りのデータが格納されます。 どこが問題かわかりませんでしょうか。

    • ベストアンサー
    • Java
  • Strutsでoptionタグの作り方

    例えばActionFormのメンバにBeanのリストがあるとして、 JSPではStrutsのhtmlタグを使ってselectボックスのoptionに ActionForm内のBeanリストをセットする方法を教えて下さい。 具体的に実現したいことは以下のような事です。 例> // アクションフォーム public sampleForm extends ActionForm {  private List<sampleBean> sampleBeanList; // getter、setterは省略 } // JSPでStrutsタグ(<html:select>とか<html:options>)を使って以下のようなセレクトボックスを作成したい! // 実現方法をご存知のかた、どうかご教示ください。 <select> <option value="sampleBeanのプロパティ">sampleBeanのプロパティ</option> <option value="sampleBeanのプロパティ">sampleBeanのプロパティ</option> <option value="sampleBeanのプロパティ">sampleBeanのプロパティ</option> <option value="sampleBeanのプロパティ">sampleBeanのプロパティ</option> </select> ちなみに環境は以下の通りです。 Java 1.6 Struts 1.3.8 Tomcat 6 以上、宜しくお願い致します。

  • Strutsでの質問になります。

    Strutsでの質問になります。 いつもお世話になっております。宜しくお願いします。 環境は Struts1.2 eclipse3.4 JavaJDK1.5 JavaJre1.5 tomcat5.5 になります。 下記の部分を教えて頂ければ幸いです。 所々抜粋しております。 <html:form action="/userCheckForm" > <bean:message key="property.Ownership.qualification" />:<br/> <html:multibox property="sikaku" value="基本情報技術者"/>基本情報処理技術者<br/> <html:multibox property="sikaku" value="ソフトウェア開発技術者"/>ソフトウェア開発技術者 <html:multibox property="sikaku" value="その他"/>その他<br/><br/> <br/> ActionFormは抜粋してますが private String[] sikaku;      public String[] getSikaku() { return sikaku; } public void setSikaku(String[] sikaku) { this.sikaku = sikaku; } 関係ある部分はこのようにしています。 ActionはForwardしてるだけで特に何もしておりません。 表示側で <bean:message key="property.Ownership.qualification" />:<br/> <bean:write name="UserCheckForm" property="sikaku" scope="request" /><br/> このようにしておりますが、配列が思うように取ってこれず、チェックされたもののみ 表示したいんですがどのようにしたらいいでしょうか? チェックをいれ表示すると [Ljava.lang.String;@1c98c1b のようになり、配列がObject?のまま表示されてしまい困っております。 お力貸していただければ幸いです。 宜しくお願いいたします。

    • ベストアンサー
    • Java
  • 日付の妥当性チェックをする場合

    日付の妥当性チェックをする場合 いつもお世話になっております。 jspで選択された日付を(日付は<html:select>で選択されます。) ActionFormもしくはLogicでどのようにしたらいいかわかりませんでしたので ご質問させて頂きました。 今、私が実装しているActionFormは public class UserDateCheckActionForm extends ActionForm{ private String year; private String month; private String days; //省略(setter,getter) public boolean checkDate(String year, String month, String days){ String strDate = year+month+days; DateFormat format = DateFormat.getDateInstance(); // 日付/時刻解析を厳密に行うかどうかを設定する。 format.setLenient(false); try{ format.parse(strDate); return true; }catch(Exception e){ return false; } とこのように実装しております。これをvalidateメソッドでvalidateし、 存在しない日付(例:2000年2月31日など)をjspからsubmitされたときは jspに<html:errors>にて正しい日付を入力する旨のメッセージを出すように したいと思っております。 validateメソッドは正常に動いており、ここのロジックが悪いのかと思い、 皆様に見直して頂ければと思い、今回質問させて頂きました。 お力添え頂ければ幸いです。 宜しくお願い致します。

    • ベストアンサー
    • Java
  • 2つのリストのマージ方法について

    2つのリストのマージ方法について 下記の要件を満たしたいと考えています。 ・リスト1・2をkeyをキーにマージしたい。  リスト1[0]:key=2, value1=b  リスト1[1]:key=3, value1=d  リスト1[2]:key=4, value1=e  ・  ・  ・  リスト2[0]:key=1, value2=A  リスト2[1]:key=2, value2=B  リスト2[2]:key=5, value2=F  リスト2[3]:key=6, value2=G  ・  ・  ・  ↓  リスト3[0]:key=1, value1=A, value=""  リスト3[1]:key=2, value1=b, value=B  リスト3[2]:key=3, value1=d, value=""  リスト3[3]:key=4, value1=e, value=""  リスト3[4]:key=5, value1="", value=F  リスト3[5]:key=6, value1="", value=G  ・  ・  ・ ・リスト1・2はkeyの昇順でソート済。各リスト内では重複しているkeyはない。 ・マージ後もkeyの昇順にしたい。 ・実際のリストはそれぞれ数万件~数十万件なので、パフォーマンスを考慮したい。 下記のように作成してみたのですが、無理やりやりました感があり、分かりづらくバグがありそうです。またループでnewもしてたりしてパフォーマンスも悪そうです。もっとスマートにパフォーマンスもよい方法がないでしょうか? int checkedCount = 0; for (int i = 0; i < list1.size(); i++) { String str1 = list1.get(i).get("key"); for (int j = checkedCount; j < list2.size(); j++) { Map<String, String> map3 = new HashMap<String, String>(); String str2 = list2.get(j).get("key"); if (str1.compareTo(str2) < 0) { if (i != list1.size() - 1) { map3.put("key", str1); map3.put("value1", list1.get(i).get("value1")); map3.put("value2", ""); list3.add(map3); break; } else { Map<String, String> map4 = new HashMap<String, String>(); map4.put("key", str2); map4.put("value1", ""); map4.put("value2", list2.get(j).get("value2")); list3.add(map4); } } else if (str1.compareTo(str2) == 0) { map3.put("key", str1); map3.put("value1", list1.get(i).get("value1")); map3.put("value2", list2.get(j).get("value2")); list3.add(map3); checkedCount = j + 1; break; } else { map3.put("key", str2); map3.put("value1", ""); map3.put("value2", list2.get(j).get("value2")); list3.add(map3); checkedCount = j + 1; } } }

    • ベストアンサー
    • Java
  • phpのプリペアドステートメントのエラーについて

    phpを使い、開発を行っています。 ある画面から値を選択し、POSTを使用して、別の画面に遷移させ、プリペアドステートメントにてDB(MySQL)からデータを取得するコードを記載していたのですが、下記エラーが出力されてしまいます。 「PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in 」 下記にソースを記載しておりますが、bindValueの定義等、誤ってないと思うのですが。。。 どなたか、解決策をご教示頂けないでしょうか。 送信側のソース <?php function showOption($start, $end, $step = 1) { for ($i = $start; $i <= $end; $i += $step) { print('<option value="'.$i.'">'.$i.'</option>'); } } <form method="POST" action="AAA.php"> <div id="container"> <select id="rdate_year" name="rdate_year"> <?php showOption(2013, 2020); ?> </select> <label for="rdate_year">年</label> <select id="rdate_month" name="rdate_month"> <?php showOption(1, 12); ?> </select> <label for="rdate_month">月</label> <select id="rdate_day" name="rdate_day"> <?php showOption(1, 31); ?> </select> <label for="rdate_day">日</label> </div> <input type="submit" value="検索" /> </p> </form> AAA.php <?php $db = new PDO('mysql:host=localhost; dbname=php10; charset=utf8', 'ユーザー', 'パスワード'); $sqla = "SELECT * FROM AAAAAA WHERE rdateyear = :rdata_year AND rdatemonth = :rdate_month AND rdateday = :rdate_day"; $stt = $db->prepare($sqla); $stt->bindValue(':rdate_year', $_POST['rdate_year']); $stt->bindValue(':rdate_month', $_POST['rdate_month']); $stt->bindValue(':rdate_day', $_POST['rdate_day']); $stt->execute(); while ($row = $stt->fetch()) { print($row['rdate_year']); }?> よろしくお願いしますm(_ _)m

    • ベストアンサー
    • PHP
  • mapの値を全件取得

    いつも楽しく拝見させて頂いています。 mapオブジェクトをkeyの昇順でソートし、昇順でソートされた順にmapのvalueを取得したいって思ってます。 下記ソースで方針はあってますでしょうか? しかし下記ソースを実行すると※の行でClassCastExceptionが発生します。 String型にキャストしているつもりなのですが…なぜでしょうか? 初歩的な質問ですが宜しくお願いします。 ----------------------------------------以下ソース Map map = new TreeMap(); map.put(new Integer("12"), "000000000b"); map.put(new Integer("78"), "000000000a"); map.put(new Integer("39"), "000000000c"); map.put(new Integer("234"), "000000000g"); for(Iterator iterator = map.entrySet().iterator();iterator.hasNext();) {   Map.Entry entry = (Map.Entry)iterator.next(); ※ String key = (String)entry.getKey();   String value = (String)entry.getValue();   System.out.println(key + "=" + value);   } ・Jdk1.4.12 ・eclipse 3.0

    • ベストアンサー
    • Java
  • Mapの扱いについて

    いつもお世話になっております。 ただ今Java1.3にてMapを使用したプログラムを作成しております。 String[] hoge = {"0","0","0","0"}; String[] key = {"いいい","ううう","えええ"}; int[] point = {0,1,3}; String[] value = {"5","8","2"}; Map map = new HashMap(); map.put("あああ",hoge); map.put("いいい",hoge); map.put("ううう",hoge); map.put("えええ",hoge); map.put("おおお",hoge); for (int i=0; i < key.length; i++) { String[] wk_hoge = (String)map.get(key[i]); wk_hoge[point[i]] = value[i]; map.put(key[i],wk_hoge); } 上記のように記述し、結果としては あああ="0","0","0","0" いいい="5","0","0","0" ううう="0","8","0","0" えええ="0","0","0","2" おおお="0","0","0","0" としたいのですが、実際の結果が あああ="5","8","0","2" いいい="5","8","0","2" ううう="5","8","0","2" えええ="5","8","0","2" おおお="5","8","0","2" となってしまいます。 なぜそのようになってしまうのか原因がわかりません。 どなたかアドバイスをお願い致します。

    • ベストアンサー
    • Java
  • android CSVファイルのデータを

    初心者ですが宜しくお願いします。 やりたい処理えですが、CSVファイルのデータをHashMapにセットしたいのです。 現在は下記のように直接値をセットしています。 この値をCSVからセットするにはどうすればよいでしょうか? HashMap<String, String> map = new HashMap<String, String>(); // キーと値のペアを格納 map.put( "Key1", "あ1001" ); map.put( "key2", "い1002" ); map.put( "Key3", "う1003" ); map.put( "key4", "え1004" ); map.put( "key5", "err" ); ------------------------------------ value.csv "key2", "い1002" "Key3", "う1003" "key4", "え1004" "key5", "err" ------------------------------------ 上記csvファイルを作り、読み込むところまではわかります。 ヒント、参考サイトや参考書の情報でもかまいません。 どうぞよろしくおねがいいたします。

    • ベストアンサー
    • Java
  • hiddenフォームのvalueを自動生成したいのですが...

    JavaScriptで生成した値を、同じページの中にあるinput type=hiddenフォームのvalueの値として使用したいのですが、うまく行きません。 普通のinputタグであれば、 <SCRIPT Language="JavaScript"> <!-- function SetOrderId() { myDate = new Date(); Year = new String(myDate.getFullYear()); Month = new String(myDate.getMonth()+1); Day = new String(myDate.getDate()); if ( Day.length == 1 ) Day = "0" + Day; document.forms[0].OrderId.value = Year + "-" + Month + "-" + Day } //--> </SCRIPT> <BODY onLoad="SetOrderId()"> <INPUT NAME="OrderId" TYPE="TEXT" onClick="SetOrderId()"> で、ページを開いたときにOrderIdフォームに値が代入されているのですが、 <input type=hidden name="OrderId"> としたときには、上記のスクリプトで生成した値がinput type=hiddenのvalueに設定されず、困っています。 どうすればinput type=hiddenのvalueの値にJavaScriptで生成した値を代入できるのでしょうか?

専門家に質問してみよう