目次へ

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
property
labelProperty

 

collection属性は、Collectionをスコープから検索する際のキー。
Collectionに格納されている値はJava Beanでなければならず、パラメータの値および表示テキストはJava Beanのプロパティとして格納されています。
property属性で値が格納されているプロパティ、labelProperty属性で表示テキストが格納されているプロパティを指定します。labelPropertyが省略された場合には、表示テキストとしてパラメータ値と同じ値が使用されます。

name
property

  name属性はJava Beanをスコープから検索する際のキー。
property属性はCollectionが保持されているJava Beanのプロパティ名を指定します。
Collectionに保持されている値は、そのままパラメータの値として使用されます。

name

  property属性がない場合は、name属性で検索された値がCollectionとして扱われます。
Collectionに保持されている値は、そのままパラメータの値として使用されます。

labelName
labelProperty

  labelProperty属性はJava Beanをスコープから検索する際のキー。
labelProperty属性はCollectionが保持されているJava Beanのプロパティ名を指定します。
Collectionに保持されている値は、そのまま表示テキストとして使用されます。

labelName

  labelProperty属性が無い場合は、labelName属性で検索された値がCollectionとして扱われます。
Collectionに保持されている値は、そのまま表示テキストとして使用されます。

(labelNameおよび
labelPropertyが無い)

    パラメータの値と同じ内容を表示テキストとして使用する。

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つのフォームを作成する事。

解答例はこちら

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp