7. HTMLタグライブラリ3
HTMLタグライブラリの残りの主要タグについて説明をします。
7.1. selectタグ/optionタグ/optionsタグ/optionsCollectionタグ
selectタグ/optionタグ/optionsタグ/optionsCollectionタグはHTMLのセレクト(<select><option>)を実現するものです。selectタグがHTMLの<select>タグに、option/options/optionsCollectionタグがHTMLの<option>タグに対応しています。後者は選択肢の取り出し方の違いによって使い分けます。
selectタグ
以下はselectタグの主要属性一覧です。
属性名 | 必須 | スクリプト 可能 |
説明 |
---|---|---|---|
property |
○ | ○ | パラメータ名。ActionForm Beanのプロパティと対応している。プロパティの値によって、どの選択肢がデフォルトで選択状態かそうでないか決定される。 |
size |
○ |
表示する選択肢の個数。選択肢がそれよりも多い場合は、スクロールバーが利用される。HTMLの<select>タグのsize属性と同じ。 |
|
multiple |
○ | セレクトを複数選択可能にする場合に指定。HTMLの<select>タグのmultiple属性と同じ。 |
nameがpropertyとなっている点を除けば、HTMLの<select>タグと同じです。またselectタグにおいて選択された選択肢の値は、複数選択の場合には配列のプロパティに格納されます。
optionタグ
HTMLの<option>タグと同じです。選択された場合に送信される値をvalue属性に、表示されるテキストをボディ部に指定します。1点だけ異なり、value属性を省略する事はできません。またActionForm Beanで該当するプロパティの値がvalue属性の値と等しい場合に、選択肢はデフォルトで選択状態となります。
以下はActionForm Beanとそれに対応したselect/optionタグの例です。プロパティにtrueが設定される場合の判定アルゴリズムはcheckboxタグと同じです。
public class QuestionnaireForm extends ActionForm{ ... public boolean getQuestion3(){ ... } public void setQuestion3(boolean question3){ ... } ... }
... <html:select property="question3" size="2"> <html:option value="true">はい</html:option> <html:option value="false">いいえ</html:option> </html:select> ...
optionsタグ
optionsタグはCollection(配列も可)からHTMLの<option>タグを生成するものです。パラメータの値も表示するテキストも、両方ともCollectionから読み取ります。また属性の指定方法によって、どこからCollectionを取り出すかが変わってきます。以下はoptionsタグの主要属性を組み合わせで説明したものです。
属性名 | 必須 | スクリプト 可能 |
説明 |
---|---|---|---|
collection |
○ |
collection属性は、Collectionをスコープから検索する際のキー。 |
|
name |
○ | name属性はJava Beanをスコープから検索する際のキー。 property属性はCollectionが保持されているJava Beanのプロパティ名を指定します。 Collectionに保持されている値は、そのままパラメータの値として使用されます。 |
|
name |
○ | property属性がない場合は、name属性で検索された値がCollectionとして扱われます。 Collectionに保持されている値は、そのままパラメータの値として使用されます。 |
|
labelName |
○ | labelProperty属性はJava Beanをスコープから検索する際のキー。 labelProperty属性はCollectionが保持されているJava Beanのプロパティ名を指定します。 Collectionに保持されている値は、そのまま表示テキストとして使用されます。 |
|
labelName |
○ | labelProperty属性が無い場合は、labelName属性で検索された値がCollectionとして扱われます。 Collectionに保持されている値は、そのまま表示テキストとして使用されます。 |
|
(labelNameおよび |
パラメータの値と同じ内容を表示テキストとして使用する。 |
collection/name/propertyの組み合わせは次のoptionsCollectionタグに似ていますので、ここでは省略します。残りの5つについては、前の2つのいずれかと後の3つのいずれかを選択して使用します。以下はJava Beanとoptionsタグを利用した例です。
public class Choices{ ... public String[] getValues(){ String[] values={"1","2","3"}; return(values); } public String[] getLabels(){ String[] labels={"選択肢1","選択肢2","選択肢3"}; return(labels); } ... }
<% request.setAttribute("choices",new Choices()); %> ... <html:select property="question4" size="3"> <html:options name="choices" property="values" labelName="choices" labelProperty="labels" /> </html:select> ...
これを実行すると、以下のようなHTMLファイルが生成されます。
... <select name="question4" size="3"> <option name="1">選択肢1</option> <option name="2">選択肢2</option> <option name="3">選択肢3</option> </select> ...
optionsCollectionタグ
optionsCollectionタグは、パラメータ値と表示テキストをプロパティとして持つJava Beanを格納したCollectionから、HTMLのoptionタグを生成するものです。主要属性は以下のとおりで、optionsタグのcollection/property/labelProperty属性を利用する組み合わせに似ています。
属性名 | 必須 | スクリプト 可能 |
説明 |
---|---|---|---|
property |
○ | Collectionを返すActionForm Beanのプロパティ。name属性が使用されている場合には、それによって検索されたJava Beanのプロパティを示す。 | |
name |
○ |
Java Beanをスコープから検索するためのキー。この属性が指定されていない場合には、ActionForm Beanが使用される。 |
|
value |
○ | パラメータ値が格納されているJava Bean(Collection内にある)のプロパティ。省略した場合には、デフォルト値として「value」が使用される。 | |
label |
○ | 表示するテキストが格納されているJava Bean(Collection内になる)のプロパティ。省略した場合には、デフォルト値として「label」が使用される。 |
optionsタグのcollection属性を指定した場合は、スコープからCollectionが直接検索されという点がoptionsCollectionタグと違います。
さてoptionsCollectionタグにおいては、Collection内に格納するJava Beanも定義しなければなりません。strutsではこれ用に使用できるJava Beanとしてorg.apache.struts.util.LabelValueBeanが提供されています。これはメンバとしてvalue, label、メソッドとしてそれらへのget/setメソッドを提供しているもので、そのまま簡単に利用できます。以下はActionFormBean, LabelValueBeanとoptionsCollectionタグを利用した例です。
public class QuestionnaireForm extends ActionForm{ ... public List getChoices(){ List list=new LinkedList(); list.add(new LabelValueBean("選択肢1","1")); list.add(new LabelValueBean("選択肢2","2")); list.add(new LabelValueBean("選択肢3","3")); return(list); } ... }
... <html:select property="question5" size="3"> <html:optionsCollection property="choices" value="value" label="label" /> </html:select> ...
value属性とlabel属性の値はデフォルト値と同じですので、省略しても構いません。以下はLabelValueBeanとoptionsタグを利用した例です。
... <% List list=new LinkedList(); list.add(new LabelValueBean("選択肢1","1")); list.add(new LabelValueBean("選択肢2","2")); list.add(new LabelValueBean("選択肢3","3")); pageContext.setAttribute("choices",list); %> <html:select property="question5" size="3"> <html:options collection="choices" property="value" labelProperty="label" /> </html:select> ...
2つの例、いずれも同じ以下のようなHTMLを生成します。
... <select name="question5" size="3"> <option name="1">選択肢1</option> <option name="2">選択肢2</option> <option name="3">選択肢3</option> </select> ...
(実習課題1)
以下のWebアプリケーションを、Strutsを用いて作成しなさい。
- selectタグとoption/options/optionsCollectionタグを用いて、同じ内容の選択肢を表示する3つのフォームを作成する事。