- - PR -
タグの使い方
1
| 投稿者 | 投稿内容 | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-03-25 09:51
はじめまして。昨日メンバ登録しましたげんです。
今、strutsでプログラムを作っているのですが、 いまいち使いこなせていません。 jspのselectタグに、forループを使用せずにoptionを 追加できる機能がせっかくあるので利用したいのですが、 指定の方法がわからず、実行しても画面が表示されません。 現在はActionFormクラスでCollectionオブジェクトを返し、 jspで受け取る、というつもりで次のようにコーディングしてます。 【javaファイル】 public class CalendarForm extends ActionForm{ static List years2 = new LinkedList(); /** * プルダウン・年の取得(過去20年分) */ public static Collection getYears2() { String w_year = null; for (int i=19; i>0; i--) { w_year = Integer.toString(n_year -i); years2.add(new LabelValueBean(w_year,Integer.toString(i+1))); log.debug("w_year:" + years2); } return years2; } .... } 【jspファイル】 <% ... if (request.getSession().getAttribute("years") == null) { request.getSession().setAttribute("years",CalendarForm.getYears2()); } System.out.println("get is " + request.getSession().getAttribute("years")); ... <table border="1" cellspacing="0" cellpadding="4" bordercolordark="#000000" class="Tbl"> <tr><td height="25px"><html:select property="question" size="3"> <html:options collection="years" property="value" labelProperty="label"/></html:select> </td></tr> </table> ... 今の認識では、 @<html:select>タグのpropertyは、submit時のパラメータ値なので、 任意でよい A<html:optionsCollection>タグのcollection属性は、 getした値のパラメータ名と一致し、propertyとlabelProperty値の設定は任意 と思ってます。 ネットでいろいろ検索してみたんですが、あまり質問があがってないようなので、 みなさん問題なく使っているんでしょうか? 海外のページも見てみましたが、言葉の壁が... 些細なことでもご存知でしたら、教えてください。 | ||||||||||||||||
|
投稿日時: 2004-03-25 11:01
エラーも出ませんか?select のところ以外の問題で画面が表示されない、という ことはないですか?なんとなく別の理由で表示されないような気がするんですけど。
まったくの任意ではなく、ActionForm と関係があるのはわかっていますよね?
get した値のパラメータ名が何を指すかわかりませんが、対象の Collection を 設定した pageContext等の属性名です。property と labelProperty は Collection の要素から、それぞれ value と label を取り出すためのプロパティ名です。 今回の例では、LabelValueBean を使っていますが、これは、 org.apache.struts.util.LabelValueBean ですよね? もしそうであれば、任意ではありません。
ソースを見るのがてっとり早いです。 | ||||||||||||||||
|
投稿日時: 2004-03-25 11:36
ふーばーさん、返信ありがとうございます。
画面ですが、文法的にはあっているようで、エラーは出ません。 eclipseを使って開発していますが、コンソールにも何も出ていません。 selectタグについてActionFormと関係ある、ということですが、 具体的に教えていただけませんか? また、getした値のパラメータ名とは、jspファイルの先頭に記述した "years"を指します。CalendarFormクラスのgetYears2メソッドから Collectionオブジェクトを返しています。 jspでSystem.outして"years"の内容を確認したら、org.apache.struts.util.LabelValueBeanの値が正しく入っていました。 optionsCollectionタグのproperty、lableProperty属性についても 具体的に指摘していただけたらうれしいです。 jspまではもってこれているようなので、あとはoptionの要素として 認識できればいいのかなと。 | ||||||||||||||||
|
投稿日時: 2004-03-25 13:10
select タグで選択したものが、ActionForm に格納されるんだから、名前は 任意じゃなくて ActionForm 依存でしょ?ってことです。
その前に、<html:options>、<html:optionsCollection> どっちのタグを 使おうとしているのですか?その辺の整理はちゃんとついていますか? | ||||||||||||||||
|
投稿日時: 2004-03-25 14:04
ふーばーさん、こんにちは。
基本的には<html:optionsCollection>タグを使おうと思っています。 (コーディング量がより少なそうなので) でも、内容としては<html:options>でcollection属性を指定するのも 同じかと思うのですが、違いますか? また、selectタグのname属性は送信時に次のフォームの値として保持するので、 セレクト作成用Form → Action → jsp(セレクト表示) → セレクト受信用Form(name属性を使って選択値を受信) → Action と思います。 optionsCollectionの属性値はCollectionクラスとしてセレクト作成用Formに 設定し、selectの属性値はセレクト受信用Formに作成する。 ちなみに、このセレクト部分のコーディングを削除すると、画面は表示されたので、 やっぱりここの属性値が悪さしてそうです。 | ||||||||||||||||
|
投稿日時: 2004-03-25 14:18
ふーばーさん、こんにちは。
基本的には<html:optionsCollection>タグを使おうと思っています。 (コーディング量がより少なそうなので) でも、内容としては<html:options>でcollection属性を指定するのも 同じかと思うのですが、違いますか? また、selectタグのname属性は送信時に次のフォームの値として保持するので、 セレクト作成用Form → Action → jsp(セレクト表示) → セレクト受信用Form(name属性を使って選択値を受信) → Action と思います。 optionsCollectionの属性値はCollectionクラスとしてセレクト作成用Formに 設定し、selectの属性値はセレクト受信用Formに作成する。 ちなみに、このセレクト部分のコーディングを削除すると、画面は表示されたので、 やっぱりここの属性値が悪さしてそうです。 | ||||||||||||||||
|
投稿日時: 2004-03-25 18:17
http://jakarta.apache.org/struts/userGuide/struts-html.html#optionsCollection によると > This tag differs from the <html:options> tag in that it makes more consistent > use of the name and property attributes, and allows the collection to be more > easily obtained from the enclosing form bean. となっていますな。機能的には同じでしょうね。
うーん、用語がごちゃごちゃして何を説明したいのかがよくわかりません。 属性と属性値は違う意味でしょうか? リクエスト属性(getAttribute) とリクエストパラメータ(getParameter)と Form クラスのフィールドがごちゃごちゃになっていませんか?
最初のげんさんのソースでは <html:options> を使っていますが、 <html:optionsCollection> を使ってみました? やっぱりだめでした? [ メッセージ編集済み 編集者: ふーばー 編集日時 2004-03-25 18:19 ] | ||||||||||||||||
|
投稿日時: 2004-03-26 11:21
ふーばーさんへ
やっと画面が表示されました! かれこれ2日ほど費やしてしまいました。 原因は<html:select>タグにありました。 name属性を指定してなかったことでした。。。 ActionFormクラスにも同じ名前でプロパティを作成し、 ひもづけたら表示されました。 アドバイスありがとうございます。 これからはもう少しアタマの中を整理してから質問しよう と反省しました。m(_ _)m | ||||||||||||||||
1
