Strutsで動的Formに対応する方法

このQ&Aのポイント
  • Strutsを使用して動的なフォームに対応する方法について知りたいです。
  • 質問マスタから動的に生成されたフォームに対して、どのマスタデータに対するテキストかを識別する方法を探しています。
  • Strutsを使ったWEBシステムでよくある仕様ですが、適切な方法がわかりません。お知恵をお借りしたいです。
回答を見る
  • ベストアンサー

Strutsで動的Formへの対応

Strutsにて、以下のような事を実現できる方法がわからずに困っています。 ----------------------------------------------- ●質問マスタA  ------------  ID |質問  ------------  01 |AAAA  02 |BBBB  03 |CCCC  ------------ 上記マスタより、動的にFormを生成します。 フォームは以下のようになります。 ●以下の質問にお答えください。 AAAA [ AAAAに関する回答を記入するテキスト ] BBBB [ BBBBに関する回答を記入するテキスト ] CCCC [ BBBBに関する回答を記入するテキスト ]  ↑     ↑ (ここが動的に作成されています) ----------------------------------------------- この場合、動的に作成されたフォームに対して、どのマスタデータに対するテキストなのかを分かるようにしなければならないと考えていますが、 <input type="text" name="(マスタのID)" ~> といった対応ではフォーム名が動的に変わってしまう為、ActionFormの設定ができないと思われます。 かといって、 <input type="text" name="hogehoge" ~> のようにフォーム名を固定にすると、配列として取得することは可能ですが、どのマスタIDに対するものかという所が抜けてしまいます。 このような仕様は他のWEBシステムでもよくあるかと思いますが、Strutsで実現する方法がよく分かりません。 何かよい方法をご存じないでしょうか?

  • Java
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • deadlock
  • ベストアンサー率67% (59/87)
回答No.2

確か、inputタグのindexed属性と、iterateタグで出せたと思います。 Mapにキーと値を格納しておき、通常通りiterateタグを使用します。(受け取り側のプロパティもMapです) inputタグにindexed属性を指定して出力されたHTMLを見てみてください。 MapはLinkedHashMapかTreeMapを使えば順序を保障できます。

参考URL:
http://struts.apache.org/userGuide/struts-logic.html#iterate
ryvius
質問者

お礼

ご回答ありがとうございます。m(_ _)m <html:text>のindexed属性を使えばいいんですね。 ちょっと今すぐテストできる環境がないので、環境が出来次第試してみます。 Strutsで今回のような動的フォームってあんまりしないもんなんですかね?

その他の回答 (1)

noname#49664
noname#49664
回答No.1

動的フォームってStrutsで作ったことないですね・・。  自分ならどうするか?と考えたのですが、やっぱり動的に生成する<input>はすべて固定された同じ名前にして、配列として取り出すしかないか?と思います。  その際、一番最初にtype=hiddenのものを1つ動的に生成し、そこでフォームの種類を識別する情報(ID名など)をvalueに設定しておきます。アクションフォーム側では、配列のゼロ番からその識別情報を取得し、それをもとに残りの要素の処理方法を決めます。  ・・というやり方ではいかがでしょうね? 実際に試してないのでうまくいくかわかりませんが・・。

ryvius
質問者

お礼

ご回答ありがとうございます。 やはりStrutsでは動的フォームの対応は難しいんですかね? あまりStrutsを使用した事がないのですが、もし配列で取得した場合、何も入力されなかったテキスト項目の扱いはどうなるんでしょうか? NULLとして配列に格納されるのか、もしくは値が設定されているものだけで配列に格納されるのか・・・ もし前者ならご回答頂いた方法でもいけるかもしれませんね。

関連するQ&A

  • SQLの書き方について教えてください。

    accessについて。 シートの中に列名name、列名friendnameがあります。 name,friendname aaaa,bbbb bbbb,cccc cccc,aaaa dddd,aaaa eeee,bbbb ffff,eeee ほしいデータは aaaa,bbbb,cccc bbbb,cccc,aaaa cccc,aaaa,bbbb dddd,aaaa,bbbb eeee,bbbb,cccc ffff,eeee,bbbb と友達の友達の名前がほしいのです。 SQLの書き方を教えてください。 よろしくお願いします。

  • 特殊文字を含むフォームデータの受け渡し

    HTML+PHPでフォームを作っているのですが、 フォーム内のtextareaに特殊文字を含んだ場合に、フォームデータが全て渡って来ない場合があります。 このような現象の原因、対処法等ご存知の方がおりましたら、ぜひともご教授ください。 以下、現象の詳細です。-------------------------------- ・ccccの中に特殊文字(&trade;が文字参照になってない状態等)が入っている状態でsubmitすると、aaaaがPOST変数に入っていない。 ・valueの値が入ってないのではなく、aaaa自体が存在しません。 ・同様に書いているいくつかのフォームでも発生するものとしないものがある ---フォーム--- <form method="post" enctype="multipart/form-data" action="test.php"> <input type="hidden" name="aaaa" value="aaaa"> <input type="hidden" name="bbbb" value="bbbb"> <textarea name="cccc"> ---test.php--- 先頭で$_POSTをprintしてます。

    • 締切済み
    • PHP
  • mysqlについて

    いつもお世話になっております。 またまたmysqlについて質問させていただきます。 下記のようなテーブルがあります。 tabel A | type_id | member_id | date| | 2 | 45| 2012-6-21 | | 2 | 46| 2012-6-22 | | 2 | 47| 2012-6-19 | | 2 | 48| 2012-6-10 | | 4 | 49| 2012-5-23 | | 4 | 50| 2012-5-24 | | 4 | 51| 2012-5-21 | | 4 | 52| 2012-5-22 | | 3 | 53| 2012-7-25 | | 3 | 54| 2012-7-26 | | 3 | 56| 2012-7-23 | | 3 | 57| 2012-7-24 | | 1 | 58| 2012-8-17 | | 1 | 59| 2012-8-18 | | 1 | 60| 2012-8-25 | | 1 | 61| 2012-8-26 | table B | type_id | name | | 1 | aaaa | | 2 | bbbb | | 3 | cccc | | 4 | dddd | 下記の条件で値を取得するSQLをご教授いただけますでしょうか 1.type_idでまとめたものを3件ずつ取得   (三件の中で一番直近のdateを持っているもの順にtype_idを並べる) 2.type_idのまとめた三件がdateの直近順 3.type_idのそれぞれのnameをくっつける 結果として | type_id | member_id | date|name | 4 | 51| 2012-5-21 |dddd | 4 | 49| 2012-5-23 |dddd | 4 | 50| 2012-5-24 |dddd | 2 | 48| 2012-6-10 |bbbb | 2 | 47| 2012-6-19 |bbbb | 2 | 45| 2012-6-21 |bbbb | 3 | 56| 2012-7-23 |cccc | 3 | 57| 2012-7-24 |cccc | 3 | 53| 2012-7-25 |cccc | 1 | 58| 2012-8-17 |aaaa | 1 | 59| 2012-8-18 |aaaa | 1 | 60| 2012-8-25 |aaaa 説明が下手ですみません…分かりにくければ補足説明いたします…

    • ベストアンサー
    • MySQL
  • URLにパラメータを記述して結果を得るには?

    URLにパラメータを記述して結果を得るには? フォームに入力する内容を、URLに記述してアクセスしたいのですが、 うまくいきません。どこが悪いのでしょうか。 ■うまくいかないURL(自作) http://www.*********/test.php?AAAA=A1&BBBB=B1&CCCC=C1&DDDD=D1&submit=E1 ■フォームのソース <form action=test.php method=post name=test> <input type=hidden name=AAAA value=A1> <input type=text maxlength=4 name=BBBB value="B1"> <input type=text maxlength=2 name=CCCC value="C1"> <select name="DDDD"> <option value="D1">DDDD1</option> <option value="D2" selected="selected">DDDD2</option> </select> <input type=submit value=E1> <input type=submit NAME="FFFF" value="F1"> </form> ■補足 ソースに対してご意見があるかもしれませんが、ソースは変更できません。 そういった前提でお願い致します。

    • ベストアンサー
    • PHP
  • SQLが組めません…

    大変恥ずかしい話ですが恥をしのんでHelpさせていただきます。 例えばテーブルTESTに項目がCODE,NAMEとあったとして NAMEの内容がかぶっている項目が有ったら 大きいCODEの方を小さいCODEの内容に上書きするSQLを組みたいのです ex) CODE NAME --------- 0001 AAAA 0002 AAAA 0003 BBBB 0004 CCCC 0005 CCCC を以下のような実行結果にしたい ex) CODE NAME --------- 0002 AAAA 0002 AAAA 0003 BBBB 0005 CCCC 0005 CCCC どなたかお応えください お願いします。。。 使用しているのはORACLE9iです。

  • formの判別について

    テキストボックスが空だったら、alertをだし、からじゃなかったら次のページへ飛ぶというスクリプトを実行させたいのですが、うまくいきません。 以下のどこがおかしいのかご教授いただけないでしょうか? --------------以下スクリプト ●htmlのヘッダへ記入 <script language="JavaScript"> <!-- function checkForm(form){ /* IDのチェック */ if(!form.text1.value){// 未入力のチェック alert("IDが入力されていません。"); }else{   document.location.href="next.html";   } } //--> </script> ●html内のフォーム側 <form action="" onSubmit="checkForm(this)" method="post"> <input type="text" size="50" name="text1" maxlength="10"> ----------------------------------以上

  • ACCESSのフォーム上に連番番号を表示したい

    お世話になります フォームは単票型でなく、表型です↓ 例 1 aaaa1 bbbb1 cccc1 2 aaaa2 bbbb2 cccc2 3 aaaa3 bbbb3 cccc3 aaaa1等、右側はテーブルからデータを表示しています この、左の1,2,3、は単なる、表示で関連付けるデータは ありません この単なる1,2,3、はどのようにだすのですか よろしくお願いします

  • formタグ

    HTMLで、formを使用し、CGIへテキストエリアのデータをpostしたいと 考えております。 テキストエリアを3つ、ボタンを1つ設けるならば 通常以下のようにすると思います。(必要部分の抜粋) <form action="foo1.cgi" method="post" ENCTYPE="multipart/form-data"> <input type="text" name="text1" value="text1" size=50 maxlength=100> <input type="text" name="text2" value="text2" size=50 maxlength=100> <input type="text" name="text3" value="text3" size=50 maxlength=100> <input type="submit" name="aaa" value="実行"> </form> こうすると、実行ボタンをクリックすると、text1、text2、text3のテキストエリアに 記述されているテキストが送信されますが、ここにボタンをもう一つ設け、 上記3つのデータを別のCGIに送信したいのですが、 この場合どのようにHTMLを記述したらよいでしょうか? 新たに下記のようにformタグを設けると、テキストエリアは6つになってしまいますし。。。 <form action="foo2.cgi" method="post" ENCTYPE="multipart/form-data"> <input type="text" name="text1" value="text1" size=50 maxlength=100> <input type="text" name="text2" value="text2" size=50 maxlength=100> <input type="text" name="text3" value="text3" size=50 maxlength=100> <input type="submit" name="aaa" value="実行2"> </form> どなたか分かる方情報頂けますか。

    • ベストアンサー
    • HTML
  • DTSパッケージでテキストファイルのインポート

    SQLServer2000で、DTSパッケージを使ってテキストファイルをインポートしているのですが、インポート先テーブルに主キーを設定していないためか、インポートするたびにレコードの順番が変わってしまいます。 例) テキストファイル fld1|fld2|fld3 1111|AAAA|aaaa 2222|BBBB|bbbb 3333|CCCC|cccc SQLServerのテーブル fld1|fld2|fld3 2222|BBBB|bbbb 3333|CCCC|cccc 1111|AAAA|aaaa のようになってしまいます。 これをテキストファイル通りのレコード順でインポートするにはどうすればいいのでしょうか? ちなみに実際のファイルにはソートをかけられるフィールドはありません。 よろしくお願いします。

  • SELECT分での結果の取り出し方

    以下の様なテーブルから SELECT分で条件をWHERE CODE = '0001' の様に指定して 求まった結果を1つの文字列にしたいのですが 良い方法がありましたら、教えて下さい。 SELECT * from testtbl; CODE NAME ------------------------------- 0001 AAAA 0001 BBBB 0002 CCCC 0003 DDDD この例だと、 SELECT NAME FROM testtbl WHERE CODE = '0001'の様な形で NAMEの部分の結果として,'AAAA,BBBB'の文字列を取得したいです。 ファンクションとかで実現できるでしょうか?

専門家に質問してみよう