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

7.6  单选按钮和检查框标签

7.6.1  <html:radio>单选按钮标签

该标签对应HTML中的<input type="radio">元素,用来生成单选按钮。该标签被嵌套在<html:form>标签后成为表单元素。

该标签具有以下重要的3个属性。

name属性:指定存在某一范围内的Bean。

property属性:<html:radio>标签必须存在的属性;该属性值匹配由name属性指定的 Bean中的setXXX()与getXXX()方法。当忽略name属性时,则与<html:form>标签关联的FormBean进行匹配。

value属性:<html:radio>标签必须存在的属性;表示该控件的实际值。

当多个<html:radio>标签的propertry属性值相同,value属性不同的时候,就构成了一组单选按钮。当选中某个单选按钮提交表单后,Struts会调用与该控件关联的ActionForm Bean中的匹配property属性值的setXXX()方法,将该控件的value属性值赋值给该Bean中对应的属性;ActionForm Bean中与<html:radio>标签中property属性值匹配的getXXX()方法返回的值决定了哪个单选按钮被选中。请看下面的实例。

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

实例程序创建过程如下。

(1)struts-config.xml文件配置如下。

例程7-6:光盘\mr\07\sl\06\WEB-INF\struts-config.xml

<form-beans>

    <form-bean name="sexform" type="com.radio.SexForm"/>

</form-beans>

<action

      path="/selectsex"

      type="com.radio.action.SexAction"

      name="sexform">

      <forward name="success" path="/index.jsp"/>

</action>

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

例程7-6:光盘\mr\07\sl\06\src\com\radio\actionform\SexForm.java

package com.radio.actionform;

private String sex="man";

public void setSex(String sex){

    this.sex=sex;

}

public String getSex(){

    return this.sex;

}

(3)创建处理用户请求的Action类:SexAction。在本实例中,SexAction类不需要做任何操作。其关键代码如下。

例程7-6:光盘\mr\07\sl\06\src\com\radio\action\SexAction.java

public ActionForward execute(ActionMapping mapping, ActionForm form,

                         HttpServletRequest request, HttpServletResponse response){

    return mapping.findForward("success");

}

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

例程7-6:光盘\mr\07\sl\06\index.jsp

<html:form action="selectsex">

    <tr><td align="center">性别:

         <html:radio property="sex" value="man"/>男

         <html:radio property="sex" value="women"/>女

    </td></tr>

    <tr><td align="center"><html:submit value="提交"/></td></tr>

</html:form>

访问index.jsp文件后,“男”单选项处于被选中状态。运行结果如图7.10所示。

图7.10  单选按钮

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

http://localhost:8080/06/selectsex.do?sex=women

此时SexForm中的sex属性值为“women”。

7.6.2  <html:checkbox>检查框标签

该标签对应HTML中的<input type="checkbox">元素。其中property属性是必须存在的,它与name属性指定的或与当前表单关联的ActionForm Bean中的getXXX()方法和setXXX()方法相匹配。以便Struts通过property属性值在与该标签关联的ActionForm Bean中找到相应的setXXX()和getXXX()方法进行填充和回显。

使用该标签时,其property属性要与相应的ActionForm Bean中的boolean型的变量对应。如<html:checkbox property="s_del" value="true"/>在某ActionForm Bean中对应如下属性与方法。

private boolean s_del;

public void setS_del(boolean s_del){

    this.s_del=s_del;

}

public boolean getS_del(0{

    return this.s_del;

}

value属性表示检查框被选中时加入到请求中的参数值。若该值为“true”,则当与<html:checkbox>标签关联的ActionForm Bean中对应的getXXX()方法返回值为true时,表示该检查框被选中。当选中某个检查框提交表单后,Struts通过与<html:checkbox>标签关联的ActionForm Bean中对应的setXXX()方法将该检查框的值赋给ActionForm Bean中相应的boolean型变量。

没有选中的检查框不会调用对应的setXXX()方法改变ActionForm Bean中相应的boolean型变量的值,所以如果用户选中了某个检查框,即使在后面的操作中取消了对该检查框的选择,这个检查框仍然会被标记为选中状态。如图7.11所示。

图7.11  没有进行复位操作的检查框

所以必须在ActionForm Bean中通过reset()方法进行复位操作,以保证检查框的正常使用。若<html:checkbox>标签的value属性为“true”,通过以下代码进行复位操作。      

    public void reset(ActionMapping mapping, HttpServletRequest request) {

        this.s_del=false;                    //将属性设为false

    }

如图7.12所示。

图7.12  进行复位操作的检查框

7.6.3  <html:multibox>数组检查框标签

该标签通过字符串数组来生成多个被选中的检查框。它有一个不可缺少的属性property。property属性值要匹配<html:multibox>标签的name属性指定的或与当前表单关联的ActionFrom Bean中的getXXX()和setXXX()方法。getXXX()方法返回的是一个字符串数组,该数组中的每个元素就表示了被选中的检查框的值。

当有检查框被选中提交表单后,被选中的检查框会以同一个参数名,不同值的形式加入到请求中,Struts通过匹配的setXXX()方法将请求中的参数值存储到ActionForm Bean中相应的数组中,若之前数组中有元素存在则被覆盖,数组会被赋为新值。这样字符串数组中就存储了被选中检查框的值。若要取消某个被选中的检查框,只需从该字符串数组中移除检查框的值即可。

若没有检查框被选中提交表单后,数组的内容不会发生变化。所以如果在第一次选中任意多个选项提交表单后,数组中就保存了选中检查框的值;当再取消检查框的选中状态,并确保没有检查框被选中后提交表单,可能大家会认为此时已经没有检查框被选中,但实际并不是这样,上次被选中的检查框仍然会被再次标记为选中状态。所以这就是为什么要在相应的ActionFrom Bean中通过reset()方法来进行复位。每次提交表单后Struts会先调用reset()方法将数组清空,然后再通过setXXX()方法重新进行赋值。

通常<html:multibox>标签嵌套在<logic:iterate>标签中使用。<logic:iterate>标签对存储了所有要显示的检查框的集合进行遍历。<html:multibox>标签会将当前从集合中取出的一个元素在与<html:multibox>标签的property属性值匹配的getXXX()方法返回的数组中进行检索,若取出的元素存在该数组中,则将该检查框标志为选中状态并输出。

下面通过一个实例向大家讲解如何使用<html:multibox>标签来完成多项选择。

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

实例程序创建过程如下。

(1)创建ActionForm Bean:SelectForm。其关键代码如下。

例程7-7:光盘\mr\07\sl\07\src\com\multibox\actionform\SelectForm.java

package com.multibox.actionform;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.*;

public class SelectForm extends ActionForm {

    private String[] allselects={"A","B","C","D"};            //该数组中存储了所有的检查框

    private String[] myselects=new String[0];                //该数组中存储了被选中的检查框

    public void reset(ActionMapping mapping, HttpServletRequest request) {

        this.myselects=new String[0];

    }

    public void setMyselects(String[] myselects){

        this.myselects=myselects;

    }

    public String[] getMyselects(){

        return this.myselects;

    }

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

}

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

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

<jsp:useBean id="selects" class="com.multibox.actionform.SelectForm"/>

多项选择:

<html:form action="doselect">                       //该表单对应SelectForm类

  <logic:iterate id="idselect" name="selects" property="allselects">

    <html:multibox property="myselects">

      <bean write name="idselect"/>                 //检查框的实际值(传递给服务器)

    </html:multibox>

    <bean:write name="idselect"/>                   //检查框的标签(显示给用户)

  </logic:iterate>

</html:form>

若用户选中“A”和“C”选项提交表单生成如下请求。

http://localhost:8080/07/doselect.do?myselects=A&myselects=C

运行结果如图7.13所示。

图7.13  数组检查框

此时数组myselects的内容为“{"A","C"}”。在程序中还可以通过LavelValueBean类来输出检查框的实际值和标签。请看下面的实例。

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

实例程序创建过程如下。

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

例程7-8:光盘\mr\07\sl\08\src\com\multibox_LabelValueBean\actionform\Select Form.java

package com.multibox_LabelValueBean.actionform;

import java.util.*;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action*;

import org.apache.struts.util.LabelValueBean;

public class SelectForm extends ActionForm {

    private ArrayList allselects=new ArrayList();

    private String[] myselects=new String[0];

    public SelectForm(){

        allselects.add(new LabelValueBean("A选项","A"));

        allselects.add(new LabelValueBean("B选项","B"));

        allselects.add(new LabelValueBean("C选项","C"));

        allselects.add(new LabelValueBean("D选项","D"));

    }

    public void reset(ActionMapping mapping, HttpServletRequest request) {

        this.myselects=new String[0];

    }

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

}

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

例程7-8:光盘\mr\07\sl\08\index.jsp

<jsp:useBean id="selects" class="com.multibox_LabelValueBean.actionform.SelectForm"/>

<html:form action="doselect" method="get">

      多项选择:

      <logic:iterate id="idselect" name="selects" property="allselects">

          <html:multibox property="myselects">

              <bean:write name="idselect" property="value"/>  //检查框的实际值(传递给服务器)

          </html:multibox>

              <bean:write name="idselect" property="label"/>  //检查框的标签(显示给用户)

      </logic:iterate>

</html:form>

运行结果如图7.14所示。

图7.14  数组检查框之LabelValueBean

查看所有评论(0)条】

最近评论



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