Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 1289|回复: 0

struts2表单UI标签

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2011-6-6 15:40:00 | 显示全部楼层 |阅读模式

    表单标签是 struts2的核心标签库的核心,用于输入数据,提交数据。struts2标签库不仅包括常规的HTML控件如输入框,文本域等,还集成了额外的常用控件,例如日期时间控件,联动下拉框,自动填充下拉菜单等。这些常用控件是集成的Dojo框架,是利用javaScript实现的。
    1,form标签输出表单
    struts2里的form 标签不仅会生成<form>标签,还会生成<table>标签等布局代码。
    [color=#990066,strength=3);]formTag.jsp

      <struts:form action="addBook" validate="true" namespace="/">  <!-- Form标签,启用标签 -->
          <struts:label value="form标签"></struts:label>  <!-- 文字标签 -->
          <struts:textfield name="name" label="书名"></struts:textfield> <!-- 文本域标签 -->
          <struts:textfield name="author" label="作者"></struts:textfield> <!-- 文本域标签 -->
          <struts:submit value=" 提交 " align="center"></struts:submit> <!-- 提交按钮 -->
      </struts:form>
    2,textfield,textarea,file,checkbox,radio标签
    这些标签是最基本的表单标签,会生成HTML里的<input>标签。同form标签一样,这些标签页会根据当前主题生成布局代码,如<TR><TD>等,例如:
    [color=#990066,strength=3);]inputTag.jsp

      <struts:form action="login">
         <struts:textfield name="textfield" label="文本域" required="true" tooltip="这是一个文本框"></struts:textfield>
         <struts:password name="textarea" label="密码域"  tooltip="这是密码域"></struts:password>
         <struts:textarea name="textarea" label="文本域" tooltip="这是文本域"></struts:textarea>
         <struts:file name="file" label="文件域" tooltip="这是文件域"></struts:file>
         <struts:radio list="#{'male':'男','female':'女'}" name="sex" label="单选框" tooltip="这是单选框"></struts:radio>
         <struts:checkbox name="hobby" label="是否精通 Struts2" value="true"></struts:checkbox>
         <struts:submit value=" 提交 " method="logout" align="center"></struts:submit>
      </struts:form>
    注:radio标签的list属性必须是Map类型,key为实际值,value为显示值。如果为List类型,会抛出以常规。
    运行如图:

    3,select,autocomplete标签下拉框
    select标签为标准的下拉框,生成HTML里的<select>标签。autocomplete标签为具有自动完成功能的下拉框,能根据所填的内容筛选下拉框的内容。使用autocomplete标签必须使用Ajax主题,因为它用到了DOJO的JavaScript库。这两个标签的用法完全一样:
    [color=#990066,strength=3);]autocompleteTag.jsp
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@ taglib uri="/struts-tags" prefix="struts"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
        <struts:head theme="ajax"/>
      <body>
      <%
         List<String> provinceList = new ArrayList<String>();
         provinceList.add("北京");
         provinceList.add("上海");
         provinceList.add("天津");
         provinceList.add("重庆");
         provinceList.add("河北");
         provinceList.add("河南");
         provinceList.add("山东");
         provinceList.add("山西");
         provinceList.add("江苏");
         provinceList.add("浙江");
         request.setAttribute("provinceList",provinceList);
       %>
       <struts:form action="login">
          <struts:select list="%{#request.provinceList}" name="province" label="请选择省份"></struts:select>
          <struts:autocompleter name="province" label="请选择省份" list="%{#request.provinceList}"></struts:autocompleter>
       </struts:form>
      </body>
    </html>
    效果如下:


    4,使用动态数据的autocomplete标签
    上例中下拉框中的数据都是静态数据,所有的数据都会随页面一块发送到浏览器。autocomplete标签还支持Ajax方式获取动态数据,根据填写的内容动态地显示输入提示。如果下拉框的数据很庞大,只能使用动态数据。
    [color=#990066,strength=3);]autocompleteAjaxTag.jsp
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@ taglib uri="/struts-tags" prefix="struts" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <struts:head theme="ajax"/>
    <body>
    <struts:url id="dataUrl" value="/autocompleteAjaxData.jsp"></struts:url>  <!-- 获取数据的URL -->
    请选择国家:
    <!-- 指定HREF -->
    <struts:autocompleter name="country" theme="ajax" href="%{dataUrl}"
       loadOnTextChange="true" loadMinimumCount="0" autoComplete="false"
       showDownArrow="true" indicator="indicator"/>  <!-- 指定indicator -->
       <img id="indicator" src="images/loading.gif"/>
      </body>
    </html>
    href属性指定获取数据的URL。该URL会根据当前输入的内容动态地筛选内容,返回下拉框数据。indicator属性可以为一个图片或者一段文字,autocomplete获取数据时会显示indicator。获取数据的URL代码如下:
    [color=#990066,strength=3);]autocompleteAjaxData.jsp
    <%
       out.clear();
       request.setCharacterEncoding("UTF-8");
       response.setHeader(&quotragma","no-cache");    //禁止缓存
       response.setHeader("Cache-Control","no-cache"); //禁止缓存
       response.setDateHeader("Expires",0);
       
       String[] countries = {"Aland Islands","Albania","Algeria","American Samoa(USA)","Andorra","Angola","Anguilla","Antarctica","Antigua","Antigua and Barbuda",};
       String country = request.getParameter("country"); //当前autocomplete已填写的内容
       
       if(country == null)
       country = "";  //如果没有填写,当做空字符串
       StringBuffer buffer = new StringBuffer();   //StringBuffer
       for(int i = 0; i < countries.length; i++){
          if(countries.toLowerCase().startsWith(country.toLowerCase())){  // 遍历所有的国家
              if(buffer.length() != 0)
                 buffer.append(",");
                 buffer.append("['"+countries+"']");//如果包含已输入的字符串则显示
          }
       }
       Thread.sleep(1000);   //为演示indicator,让数据延迟1秒钟显示
       out.print("["+buffer+"]");  //输出数据
    %>
    注:autocomplete标签能够接受JSON格式的数据,因此该JSP会把数据以JSON格式输出,例如:[['Andorra'],['Angola'],['Anguilla'],['Antarctica'],['Antigua and Barbuba']]。运行效果如图:


    5,checkboxlist标签多选框组
    checkboxlist标签为可以多选的多个复选框。如果Action中对应的属性为List类型或者数组类型,JSP中的checkboxlist标签会自动选中多个值,例如:
    [color=#990066,strength=3);]checkboxlistTag.jsp
    <%
       List<String> favouriteList = new ArrayList<String>();  //List对象
       favouriteList.add("苹果");
       favouriteList.add("橘子");
       favouriteList.add("梨");
       favouriteList.add("香蕉");
       request.setAttribute("favouriteList",favouriteList); //放到request中
    %>  
       <struts:form action="login">
          <struts:checkboxlist list="#request.favouriteList" name="favourite" label="最喜欢的水果"></struts:checkboxlist>
       </struts:form>
    JSP中会显示4个复选框。各个复选框是否被选中取决于Action.Action代码如下:
    [color=#990066,strength=3);]CheckboxlistAction.java
    @Results([email=value=%7B@Result(name=%22success%22,value=%22/checkboxlistTag.jsp]value={@Result(name="success",value="/checkboxlistTag.jsp[/email]")})
    public class CheckboxlistAction {
    private List<String> favourite = new ArrayList<String>(); //选中的数据
    public String execute(){
      favourite.add("苹果");
      favourite.add("梨");
      return Action.SUCCESS;
    }
    public List<String> getFavourite() {
      return favourite;
    }
    public void setFavourite(List<String> favourite) {
      this.favourite = favourite;
    }
    }
    效果如下:


    6,combobox标签复合框
    combobox标签用于生成一个组合框(Combo Box)。ComboBox的特点就是可选择可编辑。代码:
    [color=#990066,strength=3);]comboboxTag.jsp
    <%
       List<String> favouriteList = new ArrayList<String>();  //List对象
       favouriteList.add("苹果");
       favouriteList.add("橘子");
       favouriteList.add("梨");
       favouriteList.add("香蕉");
       request.setAttribute("favouriteList",favouriteList); //放到request中
    %>  
    <struts:form action="login">
         <struts:combobox list="#request.favouriteList" name="favourite" label="最喜欢的水果"/>
    </struts:form>
    7,datetimepicker标签日期选择器
    datetimepicker标签是专门输入日期时间的输入框,它自带一个日历,可以指定日历格式。该标签也使用了DOJO框架的Javascript类库。代码如下:
    [color=#990066,strength=3);]datetimepickerTag.jsp
      <struts:form action="login">
        <struts:datetimepicker name="date" displayFormat="yyyy-MM-dd" label="请选择日期"></struts:datetimepicker>
      </struts:form>
    效果如下:


    8,doubleselect标签联动选择框
    doubleselect标签为联动下拉框,选择第一个下拉框,第二个下拉框的值会随第一个下拉框的值改变而改变。
    [color=#990066,strength=3);]doubleselectTag.jsp
    <%
      List<String> provinceList = new ArrayList<String>(); //List对象,存放省份
      
      provinceList.add("北京");
      provinceList.add("上海");
      provinceList.add("天津");
      provinceList.add("重庆");
      provinceList.add("河北");
      provinceList.add("河南");
      provinceList.add("山东");
      provinceList.add("山西");
      provinceList.add("江苏");
      provinceList.add("浙江");
      
      request.setAttribute("provinceList",provinceList); //存放到request中
      
      Map<String,List<String>> cityMap = new HashMap<String,List<String>>(); //Map对象
      List<String> cityList = new ArrayList<String>();  //添加北京市的城区
      
      cityList.add("东城区");
      cityList.add("西城区");
      cityList.add("海淀区");
      cityList.add("朝阳区");
      
      cityMap.put("北京",cityList);
      
      List<String> cityList1 = new ArrayList<String>();
      
      cityList1.add("青岛");
      cityList1.add("济南");
      cityList1.add("潍坊");
      cityList1.add("烟台");
      cityList1.add("淄博");
      cityMap.put("山东",cityList1);

      request.setAttribute("cityMap",cityMap); //放到request中
    %>  
    <struts:form action="login">
        <struts:doubleselect name="province" list="#request.provinceList" doubleName="city" doubleList="#request.cityMap.get(top)"  label="请选择省份,市"></struts:doubleselect>
    </struts:form>
    该标签使用的关键是,list属性(代表一个下拉框)里为集合类型或者数组类型,而doubleList属性(代表第二个下拉框)为Map类型,并且Map的value也为集合类型或者数组类型。
    效果如下:


    9,optiontransferselect标签
    optiontransferselect标签左右各有一个列表,右边的选项可以转到左边,左边的选项也可以转到右边。optiontransferselect标签是利用两个<select>实现的。
    [color=#990066,strength=3);]optiontransferselectTag.jsp
    <struts:head theme="ajax"/>
      
      <body>
      <%
      List<String> provinceSelected = new ArrayList<String>(); //List对象,存放省份
      
      provinceSelected.add("北京");
      provinceSelected.add("上海");
      provinceSelected.add("天津");
      provinceSelected.add("重庆");
      provinceSelected.add("河北");
      provinceSelected.add("河南");
      provinceSelected.add("山东");
      provinceSelected.add("山西");
      provinceSelected.add("江苏");
      provinceSelected.add("浙江");
      
      request.setAttribute("provinceSelected",provinceSelected); //存放到request中
      
      List<String> provinceUnselected = new ArrayList<String>(); //没有选中的省份的List
      
      provinceUnselected.add("湖南");
      provinceUnselected.add("湖北");
      provinceUnselected.add("云南");
      provinceUnselected.add("广东");
      provinceUnselected.add("广西");
      
      request.setAttribute("provinceUnselected",provinceUnselected);
    %>

    <struts:form action="login">
         <strutsptiontransferselect name="province" list="#request.provinceUnselected" doubleName="city" doubleList="#request.provinceSelected"
         leftUpLabel="向上" leftDownLabel="向下" rightDownLabel="向下" rightUpLabel="向上" leftTitle="已经选中的省份" rightTitle="剩余的省份" headerKey=""
         headerValue="---请选择省份---"></struts:optiontransferselect>
    </struts:form>
    效果如下:


    10,optgroup标签选项组
    <OptGroup>是个标准的HTML标签,用于给<select>选项分组。optgroup标签可生成<OptGroup>标签,例如:
    [color=#990033,strength=3);]optiongroupTag.jsp
    <struts:head theme="ajax"/>
      
      <body>
      
    <%
      request.setAttribute("cityList",new ArrayList<String>(){
        {
           add("北京");
           add("上海");
           add("天津");
           add("重庆");
        }
      });
      
      Map provinceMap = new HashMap();  //二级数据放到Map中
      provinceMap.put("山东",new HashMap(){
       {
         put("济南","济南");
         put("青岛","青岛");
         put("烟台","烟台");
         put("淄博","淄博");
         put("潍坊","潍坊");
       }  
      });
      provinceMap.put("河北",new HashMap<String,String>(){
         {
            put("石家庄","石家庄");
            put("唐山","唐山");
            put("疮州","疮州");
            put("邯郸","邯郸");
         }
      });
      
      request.setAttribute("provinceMap",provinceMap);//二级数据放到request中
    %>  

    <struts:form action="login">
       <struts:select list="#request.cityList" name="city" label="请选择城市">
          <struts:iterator value="#request.provinceMap">
              <struts:optgroup label="%{key}" list="%{value}"></struts:optgroup> <!-- list属性只接受Map -->
          </struts:iterator>
       </struts:select>
    </struts:form>
    注意:optgroup标签的list属性接受的不是List类型数据,而是接受Map类型数据。



    回复

    使用道具 举报

    该用户从未签到

    发表于 2011-9-26 12:59:53 | 显示全部楼层
    谢谢楼主分享啊。。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-20 14:12 , Processed in 0.411645 second(s), 50 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表