首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

7.5  下拉列表框标签

7.5.1  <html:select>标签

该标签对应HTML中的<select>元素,用于创建下拉列表框。<html:select>标签嵌入到<html:form>标签后成为表单的元素。

该标签必须包含property属性。与该标签关联的ActionForm Bean中要存在与property属性值匹配的setXXX()和getXXX()方法。当页面被加载时,getXXX()方法返回的值决定了哪个列表项被选中;当选中列表中的某个列表项提交表单后,Struts通过setXXX()方法将ActionForm Bean中对应的属性设置为被选中列表项的值。该标签的其他重要属性如下。

size:属性指定显示在页面中可见的列表项数目。

multiple:属性表示是否支持同时选择多项。忽略该属性时表示单项选择,此时与该标签关联的ActionForm Bean中与property属性对应的属性类型为String型。将该属性设置成任意字符串时表示多项选择,此时ActionForm Bean中的对应的属性类型为字符串数组。

请看下面的两个示例。

示例1:忽略multiple属性的下拉列表(地区选择列表)。

实现该下拉列表的代码如下。

所在地区:

<html:select property="shengfen" size="1">

  <html:option value="BJ">北京</html:option>

  <html:option value="JL">吉林</html:option>

  <html:option value="SH">上海</html:option>

  <html:option value="SZ">深圳</html:option>

</html:select>

说明:<html:option>标签用来生成下拉列表的一个列表项,在下一章节中有详细的介绍。

对应的ActionForm Bean的关键代码如下。

private String shengfen;

public void setShengfen(String shengfen){this.shengfen=shengfen;}

public String getShengfen(){return this.shengfen;}

如果选中“吉林”列表项,则shengfen属性的值为“JL”。运行结果如图7.2所示。

示例2:多选下拉列表框(个人爱好多选列表)。

实现该多选下拉列表的代码如下。

个人爱好:

<html:select property="links" multiple="yes" size="3">

  <html:option value="IE">上网</html:option>

  <html:option value="YY">游泳</html:option>

  <html:option value="SP">购物</html:option>

  <html:option value="PP">乒乓球</html:option>

</html:select>

对应的ActionForm Bean的关键代码如下。

private String[] likes;

public void setLikes(String[] likes){this.likes=likes;}

public String[] getLikes(){return this.likes;}

若选中“游泳”与“购物”两个列表项,如图7.3所示。则字符串数组likes的值为:{"YY","SP"}。

            

图7.2  单选下拉列表            图7.3  多选下拉列表

7.5.2  <html:option>标签

该标签对应HTML中的<option>元素。<html:option>标签需被嵌套在<html:select>标签中生成一个下拉列表项。

该标签必须包含value属性,表示选项的值,该值会通过请求被传递到服务器中。如下面的代码。

<html:form action="logon">

    姓名:<html:text property="username"/>

    性别:<html:select size="1" property="usersex">

              <html:option value="man">男</html:option>

              <html:option value="women">女</html:option>

          </html:select>

    <html:sumit value="Logon"/>

</html:form>

运行结果如图7.4所示。

图7.4  使用<html:option>标签创建下拉列表

选中“男”选项提交表单,会生成如下请求(假设当前应用程序为Logon,输入的username属性值为yxq)。

http://localhost:8080/Logon/logon.do?username=yxq&usersex=man

选项的标签(显示给用户的信息)可通过如下方法显示。

(1)将要显示的信息放在<html:option>与</html:option>之间。如上面的代码。

(2)通过bundle和key属性指定的资源文件中的内容来显示。

bundle属性指定了资源文件的引用名,表示在哪个资源文件中进行查找。它与Struts配置文件中<message-resources>元素的key属性匹配。

key属性对应bundle属性指定的资源文件中的消息关键字。

假设在当前应用下的/WEB-INF/classes/com/messages/文件夹下建立了一个UserSex. properties资源文件,内容如下。

user.sex.man=Man

user.sex.women=Women

在Struts配置文件中进行如下配置。

<message-resources parameter="com.messages.UserSex" key="sex"/>

实现下拉列表框的代码如下。

<html:select property="usersex">

    <html:option value="man" bundle="sex" key="user.sex.man"/>

    <html:option value="woman" bundle="sex" key="user.sex.women"/>

</html:select>

上述代码将会生成如下HTML元素。

<select name="usersex">

    <option value="man">Man</option>

    <option value="women">Women</option>

</select>

7.5.3  <html:options>标签

该标签需被嵌套在<html:select>标签中生成一组下拉列表项,即多个HTML中的<option>元素。<html:select>标签中可包含多个<html:options>标签。

有以下几种方法从指定的对象中生成列表项。

(1)使用collection属性指定的存在某个范围中的集合来生成列表项。

(2)使用name属性指定的存在某个范围中的对象来生成列表项。

(3)使用name属性指定的存在某个范围中的对象,并由property属性指定该对象的某个属性来生成列表项。

使用collection属性时,<html:options>标签将检索在JSP的范围内是否存在collection属性指定的集合对象,该对象中的每个元素为一个Bean,每个Bean表示一个列表项;然后调用Bean中匹配<html:options>标签的property属性值的getXXX()方法,来创建列表项的实际值(传递给服务器);同样通过调用Bean中匹配<html:options>标签的labelProperty属性值的getXXX()方法,来创建列表项的标签(显示给用户)。

1.使用collection属性创建下拉列表有两种方式。

*    自行编写collection属性指定对象中的Bean。

请看下面的实例。

*  实例位置:mr\07\sl\01

实例程序创建过程如下。

(1)创建与表单关联的ActionForm Bean:FangWeiForm。其关键代码如下。

例程7-1:光盘\mr\07\sl\01\src\com\options_1\actionform\FangWeiForm.java

package com.options_1.actionform;

import java.util.*;

import org.apache.struts.action.ActionForm;

public class FangWeiForm extends ActionForm {

    private String fangwei;                   //该属性对应<html:select property="fangwei">标签

    ……//省略了fangwei属性的getXXX()和setXXX()方法

/***********************************************************************************

*下面的方法为获取集合对象的方法,该集合对象中的每个元素为一个Bean,并且该Bean中存在

*与<html:options>标签中的property与labelProperty属性匹配的getXXX()和setXXX()方法

*********************************************************************************/

    public Vector getFWlist(){

        Vector fwlist=new Vector();

        fwlist.add(new FangWeiBean("D","东"));

        fwlist.add(new FangWeiBean("X","西"));

        fwlist.add(new FangWeiBean("N","南"));

        fwlist.add(new FangWeiBean("B","北"));

        return fwlist;

    }

}

(2)创建FangWeiBean类,关键代码如下。

例程7-1:光盘\mr\07\sl\01\src\com\options_1\actionform\FangWeiBean.java

package com.options_1.actionform;

public class FangWeiBean{

    private String fw_name;                  //对应列表项的标签

    private String fw_value;                  //对应列表项的实际值

    public FangWeiBean(String fw_value,String fw_name){

        this.fw_name=fw_name;

        this.fw_value=fw_value;

    }

    public void setFw_name(String fw_name){

        this.fw_name=fw_name;

    }

    public String getFw_name(){

        return this.fw_name;

    }

    ……//省略了fw_value属性的setXXX()和getXXX()方法

}

(3)创建index.jsp文件,该文件包含以下关键代码。

例程7-1:光盘\mr\07\sl\01\index.jsp

<jsp:useBean id="fws" class="com.options_1.actionform.FangWeiForm"/>

<%  session.setAttribute("allfw",fws.getFWlist());  %>

  <html:form action="selectfw">                         //该表单对应FangWeiForm类

       方位:

       <html:select property="fangwei">

         <html:options collection="allfw" property="fw_value" labelProperty="fw_name"/>

       </html:select>

       <html:submit value="提交"/>

</html:html>

说明如下:

① <html:options collection="allfw" property="fw_value" labelProperty="fw_name"/>标签对应FangWeiForm类中的getFWlist()方法返回的集合对象。在编写程序时,可在任意地方生成该集合对象,但要先将该集合对象存入JSP范围内,才能够使用<html:options>标签创建下拉列表。

② 上面代码中的<jsp:useBean/>标签的id属性值不能与session的allfw属性重名,否则<html:options>标签的collection属性值“allfw”指定的对象为FangWeiForm类,而不是通过FangWeiForm类中的getFWlist()方法获得的集合对象,会抛出下面的异常。

javax.servlet.ServletException: Cannot create iterator for com.options.actionform.FangWeiForm

运行结果如图7.5所示。

图7.5  方法一运行结果

选中“南”选项提交表单后生成如下请求。

http://localhost:8080/01/selectfw.do?fangwei=N

*    使用LabelValueBean类作为collection属性指定对象中的Bean。

该类存在org.apache.struts.util包下,在该类中分别表示下拉列表项的标签和实际值的两个属性为label和value。使用该类就可以替代上面的FangWeiBean类,此时<html:options>标签中的property属性和labelProperty属性的值分别为“value”和“label”。

请看下面的实例。

*  实例位置:mr\07\sl\02

实例程序创建过程如下。

(1)创建与表单关联的ActionFrom Bean:MonthForm。其关键代码如下。

例程7-2:光盘\mr\07\sl\02\src\com\options_2\actionform\MonthForm.java

package com.options_2.actionform;

import java.util.*;

import org.apache.struts.action.ActionForm;

import org.apache.struts.util.LabelValueBean;

public class MonthForm extends ActionForm {

    private String month;                     //该属性对应<html:select property="month">标签

    ……//省略了month属性的setXXX()和getXXX()方法

/***********************************************************************************

*下面的方法为获取集合对象的方法,该集合对象中的每个元素为一个LavelValueBean类对象

**********************************************************************************/

    public Vector getMonths(){

        Vector monthlist=new Vector();

        monthlist.add(new LabelValueBean("01月","1"));

        monthlist.add(new LabelValueBean("02月","2"));

        monthlist.add(new LabelValueBean("03月","3"));

        return monthlist;

    }

}

(2)创建index.jsp文件,该文件包含如下关键代码。

例程7-2:光盘\mr\07\sl\02\index.jsp

<jsp:useBean id="months" class="com.options_2.actionform.MonthForm"/>

<%  session.setAttribute("getmonths",months.getMonths());  %>

   <html:form action="selectmonth">

          月份:

          <html:select property="month">

             <html:options collection="getmonths" property="value" labelProperty="label"/>

          </html:select>

          <html:submit value="提交"/>

   </html:form>

</html:html>

运行结果如图7.6所示。

图7.6  方法二运行结果

选中“02月”选项提交表单后生成如下请求。

http://localhost:8080/02/selectmonth.do?month=2

2.使用name属性创建下拉列表

使用name属性指定一个对象,该对象中的每一个元素作为列表项的标签和实际值。请看下面的实例。

*  实例位置:mr\07\sl\03

实例程序创建过程如下。

(1)创建与表单关联的ActionFrom Bean:HomeForm。具体代码如下。

例程7-3:光盘\mr\07\sl\03\src\com\options_name_1\actionform\HomeForm.java

package com.options_name_1.actionform;

import org.apache.struts.action.ActionForm;

public class HomeForm extends ActionForm {

    private String myhome;                    //该属性对应<html:select proeprty="myhome">标签

    public void setMyhome(String myhome){

        this.myhome=myhome;

    }

    public String getMyhome(){

        return this.myhome;

    }

}

(2)创建index.jsp文件,该文件包含如下关键代码。

例程7-3:光盘\mr\07\sl\03\index.jsp

<%

   ArrayList myhome=new ArrayList();

   myhome.add("BeiJing");

   myhome.add("JiLin");

   myhome.add("ShenZhen");

   session.setAttribute("home",myhome);

%>

<html:form action="selecthome">            //该表单与HomeForm类关联

   省份:

   <html:select property="myhome">

     <html:options name="home"/>         //该标签与mylome集合对象关联

   </html:select>

   <html:submit value="提交"/>

</html:form>

运行结果如图7.7所示。

图7.7  使用name属性创建下拉列表

选中“JiLin”选项后生成如下请求。

http://localhost:8080/03/selecthome.do?myhome=JiLin

当name属性与property属性一起使用时,通过由name属性指定的Bean中匹配由property属性指定的getXXX()方法返回一个对象,该对象中的每一个元素作为列表项的标签和实际值。若忽略name属性,则由与当前表单相关联的FormBean指定对象。请看下面的实例。

*  实例位置:mr\07\sl\04

实例程序创建过程如下。

(1)创建与表单关联的ActionFrom Bean:SelectABCDForm。具体代码如下。

例程7-4:光盘\mr\07\sl\04\src\com\options_name_property\actionform\SelectABCD Form.java

package com.options_name_property.actionform;

import org.apache.struts.action.ActionForm;

public class SelectABCDForm extends ActionForm {

    private String myselect;               //该属性对应<html:select property="myselect">标签

    public void setMyselect(String myselect){

        this.myselect=myselect;

    }

    public String getMyselect(){

        return this.myselect

    }

}

(2)创建由<html:options>标签的name属性指定的Bean:AllSelect,该Bean中必须存在与<html:options>标签的property属性值匹配的setXXX()与getXXX()方法。具体代码如下。

例程7-4:光盘\mr\07\sl\04\src\com\options_name_property\actionform\AllSelect.java

package com.options_name_property.actionform;

public class AllSelect {

    private String[] selects={"A","B","C","D"};    //该属性对应<html:options property="selects">标签

    public void setSelects(String[] selects){

        this.selects=selects;

    }

    public String[] getSelects(){

        return this.selects;

    }

}

(3)创建index.jsp文件,该文件中包含如下关键代码。

例程7-4:光盘\mr\07\sl\04\index.jsp

<jsp:useBean id="allselect" class="com.options_name_property.actionform.AllSelect"/>

<html:form action="selectabcd" method="get"> //与该表单关联的ActionForm Bean为SelectABCDForm

   选择:<html:select property="myselect">

            <html:options name="allselect" property="selects"/>  //与该标签关联的Bean为AllSelect

         </html:select>

         <html:submit value="提交"/>

</html:form>

运行效果如图7.8所示。

图7.8  使用name属性与property属性创建下拉列表

选中“C”选项后生成如下请求。

http://localhost:8080/04/selectabcd.do?myselect =C

7.5.4  <html:optionsCollection>标签

该标签需被嵌套在<html:select>标签中生成一组下拉列表项,即多个HTML中的<option>元素。<html:select>标签中可包含多个<html:optionsCollection>标签。

<html:optionsCollection>标签与<html:options>标签很相似。该标签通过name属性或name与property属性指定一个对象,该对象中的每个元素为一个Bean,并且在Bean中具有分别与<html:optionsCollection>标签中的label属性和value属性指定的值匹配的getXXX()方法。其中label属性用来指定列表项的标签(显示给用户),value属性用来指定实际值(传递给服务器)。

请看下面的实例。

*  实例位置:mr\07\sl\05

实例程序创建过程如下。

(1)创建表单对应的ActionForm Bean:AgeForm。其关键代码如下。

例程7-5:光盘\mr\07\sl\05\src\com\optionsCollection\actionform\AgeForm.java

package com.optionsCollection.actionform;

import java.util.*;

import org.apache.struts.action.ActionForm;

public class AgeForm extends ActionForm {

    private String age;                       /该属性对应<html:select property="age">标签

    private ArrayList myage=new ArrayList();   //该属性对应

                                              //<html:optionsCollection property="myage">标签

    public AgeForm(){

        myage.add(new MyAge("鼠","1"));

        myage.add(new MyAge("牛","2"));

        myage.add(new MyAge("虎","3"));

    }

    public void setMyage(ArrayList myage){ this.myage=myage; }

    public ArrayList getMyage(){ return this.myage; }

    ……//省略了age属性的getXXX()和setXXX()方法代码

}

(2)创建MyAge类,关键代码如下。

例程7-5:光盘\mr\07\sl\05\src\com\optionsCollection\actionform\MyAge.java

package com.optionCollection.actionform;

public class MyAge {

    private String name;

    private String truename;

    public MyAge(String name,String truename){

        this.name=name;

        this.truename=truename;

    }

    ……//省略了属性的getXXX()与setXXX()方法

}

(3)创建index.jsp文件,该文件包含如下关键代码。

例程7-5:光盘\mr\07\sl\05\index.jsp

<html:form action="selectage">

     <tr><td align="center">属相:

          <html:select property="age">

             <html:optionsCollection property="myage" value="truename" label="name"/>

          </html:select>

          <html:submit value="提交"/>

     </td></tr>

</html:form>

上面代码中<html:optionsCollection>标签忽略了name属性,Struts会将该标签与当前表单的FormBean关联。运行结果如图7.9所示。

图7.9  通过<html:optionsCollection>标签创建的下拉列表

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论