7. HTMLタグライブラリ3
Struts 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タグの主要属性一覧です。
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/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属性を利用する組み合わせに似ています。
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を用いて作成しなさい。
|
![]()
![]()
|