- PR -

タグの使い方

1
投稿者投稿内容
げん
会議室デビュー日: 2004/03/24
投稿数: 15
投稿日時: 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値の設定は任意
と思ってます。

ネットでいろいろ検索してみたんですが、あまり質問があがってないようなので、
みなさん問題なく使っているんでしょうか?
海外のページも見てみましたが、言葉の壁が...

些細なことでもご存知でしたら、教えてください。
ふーばー
大ベテラン
会議室デビュー日: 2003/06/05
投稿数: 163
投稿日時: 2004-03-25 11:01
引用:

げんさんの書き込み (2004-03-25 09:51) より:
jspのselectタグに、forループを使用せずにoptionを
追加できる機能がせっかくあるので利用したいのですが、
指定の方法がわからず、実行しても画面が表示されません。



エラーも出ませんか?select のところ以外の問題で画面が表示されない、という
ことはないですか?なんとなく別の理由で表示されないような気がするんですけど。

引用:

今の認識では、
@<html:select>タグのpropertyは、submit時のパラメータ値なので、
 任意でよい



まったくの任意ではなく、ActionForm と関係があるのはわかっていますよね?

引用:

A<html:optionsCollection>タグのcollection属性は、
 getした値のパラメータ名と一致し、propertyとlabelProperty値の設定は任意
と思ってます。



get した値のパラメータ名が何を指すかわかりませんが、対象の Collection を
設定した pageContext等の属性名です。property と labelProperty は Collection
の要素から、それぞれ value と label を取り出すためのプロパティ名です。
今回の例では、LabelValueBean を使っていますが、これは、
org.apache.struts.util.LabelValueBean ですよね?
もしそうであれば、任意ではありません。

引用:

ネットでいろいろ検索してみたんですが、あまり質問があがってないようなので、
みなさん問題なく使っているんでしょうか?
海外のページも見てみましたが、言葉の壁が...



ソースを見るのがてっとり早いです。
げん
会議室デビュー日: 2004/03/24
投稿数: 15
投稿日時: 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の要素として
認識できればいいのかなと。
ふーばー
大ベテラン
会議室デビュー日: 2003/06/05
投稿数: 163
投稿日時: 2004-03-25 13:10
引用:

selectタグについてActionFormと関係ある、ということですが、
具体的に教えていただけませんか?



select タグで選択したものが、ActionForm に格納されるんだから、名前は
任意じゃなくて ActionForm 依存でしょ?ってことです。

引用:

また、getした値のパラメータ名とは、jspファイルの先頭に記述した
"years"を指します。CalendarFormクラスのgetYears2メソッドから
Collectionオブジェクトを返しています。
jspでSystem.outして"years"の内容を確認したら、org.apache.struts.util.LabelValueBeanの値が正しく入っていました。

optionsCollectionタグのproperty、lableProperty属性についても
具体的に指摘していただけたらうれしいです。



その前に、<html:options>、<html:optionsCollection> どっちのタグを
使おうとしているのですか?その辺の整理はちゃんとついていますか?
げん
会議室デビュー日: 2004/03/24
投稿数: 15
投稿日時: 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/24
投稿数: 15
投稿日時: 2004-03-25 14:18
ふーばーさん、こんにちは。
基本的には<html:optionsCollection>タグを使おうと思っています。
(コーディング量がより少なそうなので)
でも、内容としては<html:options>でcollection属性を指定するのも
同じかと思うのですが、違いますか?

また、selectタグのname属性は送信時に次のフォームの値として保持するので、
 セレクト作成用Form → Action → jsp(セレクト表示) →
 セレクト受信用Form(name属性を使って選択値を受信) → Action
と思います。
optionsCollectionの属性値はCollectionクラスとしてセレクト作成用Formに
設定し、selectの属性値はセレクト受信用Formに作成する。

ちなみに、このセレクト部分のコーディングを削除すると、画面は表示されたので、
やっぱりここの属性値が悪さしてそうです。
ふーばー
大ベテラン
会議室デビュー日: 2003/06/05
投稿数: 163
投稿日時: 2004-03-25 18:17
引用:

基本的には<html:optionsCollection>タグを使おうと思っています。
(コーディング量がより少なそうなので)
でも、内容としては<html:options>でcollection属性を指定するのも
同じかと思うのですが、違いますか?



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.

となっていますな。機能的には同じでしょうね。

引用:

また、selectタグのname属性は送信時に次のフォームの値として保持するので、
 セレクト作成用Form → Action → jsp(セレクト表示) →
 セレクト受信用Form(name属性を使って選択値を受信) → Action
と思います。
optionsCollectionの属性値はCollectionクラスとしてセレクト作成用Formに
設定し、selectの属性値はセレクト受信用Formに作成する。



うーん、用語がごちゃごちゃして何を説明したいのかがよくわかりません。
属性と属性値は違う意味でしょうか?
リクエスト属性(getAttribute) とリクエストパラメータ(getParameter)と
Form クラスのフィールドがごちゃごちゃになっていませんか?

引用:

ちなみに、このセレクト部分のコーディングを削除すると、画面は表示されたので、
やっぱりここの属性値が悪さしてそうです。



最初のげんさんのソースでは <html:options> を使っていますが、
<html:optionsCollection> を使ってみました?
やっぱりだめでした?

[ メッセージ編集済み 編集者: ふーばー 編集日時 2004-03-25 18:19 ]
げん
会議室デビュー日: 2004/03/24
投稿数: 15
投稿日時: 2004-03-26 11:21
ふーばーさんへ

やっと画面が表示されました!
かれこれ2日ほど費やしてしまいました。

原因は<html:select>タグにありました。
name属性を指定してなかったことでした。。。
ActionFormクラスにも同じ名前でプロパティを作成し、
ひもづけたら表示されました。

アドバイスありがとうございます。
これからはもう少しアタマの中を整理してから質問しよう
と反省しました。m(_ _)m
1

スキルアップ/キャリアアップ(JOB@IT)