struts2之如何使用复杂的UI标签

来源:互联网 发布:养树的软件 编辑:程序博客网 时间:2024/06/06 13:22

转载请注明http://blog.csdn.net/uniquewonderq


问题:

练习使用复杂的UI标签,并给框体福默认值,标签包括:

7.单选框标签

8.多选框标签

9.下拉框标签

在上一节案例的基础上,继续模拟,使用这3类标签。

步骤一:单选框标签

单选框有两种用法, 根据其初始化radio方式的不同,可以好分为静态和动态2种方式。首先我们使用静态方式来初始化客户性别选项,并根据客户数据勾选客户性别,需要在update_customer.jsp上使用单选框标签来实现 。代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><%@taglib uri="/struts-tags" prefix="s" %><html>  <head>  </head>    <body>    <h1>模拟修改客户</h1>        <%--1.表单标签 --%>    <s:form action="#" method="post">        <!--     2.文本框标签    1>生成文本框    2>根据OGNL(customer.name)取值给文本框赋值     -->     <s:textfield name="customer.name" label="姓名">     </s:textfield>         <!--     3.密码框标签    1>生成密码框    2>根据OGNL(customer.password)取值给密码框赋值    -->     <s:password name="customer.password" label="密码" showPassword="true"/>          <!--     4.文本域标签    1>生成文本域    2>根据OGNL(customer.desc)取值给文本域赋值     -->     <s:textarea name="customer.desc" label="简介" cols="30" rows="5">     </s:textarea>         <!--     5.布尔框标签    1>生成布尔框    2>根据OGNL(customer.marry)取值给布尔框赋值     -->     <s:checkbox name="customer.marry" label="是否已婚" labelposition="left">     </s:checkbox>         <!--     6.1单选框标签    1>生成单选框    2>根据OGNL(list属性值)创建的Map生成一组radio,其中Map的可以生成radio的value值,    Map的value生成radio的label值    3>根据OGNL(customer.sex)取值来与生成radio 的value比较 ,若与哪个radio的value值    一直,则将其勾选     -->     <s:radio name="customer.sex" list="#{'M':'男','F':'女'} " label="性别"/>    </s:form>   </body></html>

刷新浏览器:



静态方式初始化radio时是通过静态代码创建Map来实现的,很多时候这些选项不是固定的,是需要查询数据库得到的,即需要通过动态的方式来进行初始化选项,那么需要采用动态的方式来实现。

要实现动态初始化选项,先要创建选项实体类,来封装选项信息,因此我们要创建性别的实体类sex,当然这个场景而言并不合理。但是就当是联系说明问题罢了。

package entity;public class Sex {private String code;private String name;public String getCode() {return code;}public void setCode(String code) {this.code = code;}public String getName() {return name;}public void setName(String name) {this.name = name;}}

然后在customerDAO中追加查询全部性别的方法,代码如下:

package DAO;import java.util.ArrayList;import java.util.List;import entity.Customer;import entity.Sex;public class CustomerDAO {//模拟根据id查询客户public Customer findById(){Customer c=new Customer();//设置一些默认值c.setName("wonder");c.setPassword("123");c.setDesc("长安大学");c.setSex("M");c.setMarry(false);List<String> list=new ArrayList<String>();list.add("beijing");list.add("shanghai");c.setTravelCities(list);c.setHome("xi'an");return c;}public List<Sex> findALLSex(){List<Sex> list=new ArrayList<Sex>();Sex s1=new Sex();s1.setCode("M");s1.setName("男");list.add(s1);Sex s2=new Sex();s2.setCode("F");s2.setName("女");list.add(s2);Sex s3=new Sex();s3.setCode("0");s3.setName("其他");list.add(s3);return list;}}

然后在ToupdatecustomerACTION中模拟插叙浓缩铀的性别,代码如下:

package action;import java.util.List;import DAO.CustomerDAO;import entity.Customer;import entity.Sex;public class ToUpdateCustomerAction {//outputprivate Customer customer;//客户private List<Sex> sexes;//性别public String execute(){CustomerDAO dao=new CustomerDAO();//模拟客户查询customer=dao.findById();//模拟查询全部的性别sexes=dao.findALLSex();return "success";}public Customer getCustomer() {return customer;}public void setCustomer(Customer customer) {this.customer = customer;}public List<Sex> getSexes() {return sexes;}public void setSexes(List<Sex> sexes) {this.sexes = sexes;}}

最后,在update_customer.jsp上, 使用动态的单选框便签,根据action中返回所有性别生成性别并根据客户信息设置默认勾选,代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><%@taglib uri="/struts-tags" prefix="s" %><html>  <head>  </head>    <body>    <h1>模拟修改客户</h1>        <%--1.表单标签 --%>    <s:form action="#" method="post">        <!--     2.文本框标签    1>生成文本框    2>根据OGNL(customer.name)取值给文本框赋值     -->     <s:textfield name="customer.name" label="姓名">     </s:textfield>         <!--     3.密码框标签    1>生成密码框    2>根据OGNL(customer.password)取值给密码框赋值    -->     <s:password name="customer.password" label="密码" showPassword="true"/>          <!--     4.文本域标签    1>生成文本域    2>根据OGNL(customer.desc)取值给文本域赋值     -->     <s:textarea name="customer.desc" label="简介" cols="30" rows="5">     </s:textarea>         <!--     5.布尔框标签    1>生成布尔框    2>根据OGNL(customer.marry)取值给布尔框赋值     -->     <s:checkbox name="customer.marry" label="是否已婚" labelposition="left">     </s:checkbox>         <!--     6.1单选框标签(静态)    1>生成单选框    2>根据OGNL(list属性值)创建的Map生成一组radio,其中Map的可以生成radio的value值,    Map的value生成radio的label值    3>根据OGNL(customer.sex)取值来与生成radio 的value比较 ,若与哪个radio的value值    一直,则将其勾选     -->     <s:radio name="customer.sex" list="#{'M':'男','F':'女'} " label="性别"/>         <!--     6.2单选框标签(动态)        1>根据OGNL(list属性值)的取值初始化一组radio,并根据listKey指定的实体类中的属性    来生成radio的value值。根据listValue指定的实体类中的属性来生成radio的label值。    2>根据OGNL(customer.sex)取值来与生成radio 的value比较 ,若与哪个radio的value值    一直,则将其勾选     -->     <s:radio name="customer.sex" list="sexes" listKey="code" listValue="name" label="性别"/>    </s:form>   </body></html>

重新部署项目并启动tomcat,效果如下:

步骤二:

多选框标签

多选框的用法与单选框用法类似,也分为静态初始化和动态初始化2种,区别在于对checkbox初始化方式不同。

首先,我们通过静态初始化的方法生成一组城市的复选框,然后根据客户去过的城市来勾选这些城市。代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><%@taglib uri="/struts-tags" prefix="s" %><html>  <head>  </head>    <body>    <h1>模拟修改客户</h1>        <%--1.表单标签 --%>    <s:form action="#" method="post">        <!--     2.文本框标签    1>生成文本框    2>根据OGNL(customer.name)取值给文本框赋值     -->     <s:textfield name="customer.name" label="姓名">     </s:textfield>         <!--     3.密码框标签    1>生成密码框    2>根据OGNL(customer.password)取值给密码框赋值    -->     <s:password name="customer.password" label="密码" showPassword="true"/>          <!--     4.文本域标签    1>生成文本域    2>根据OGNL(customer.desc)取值给文本域赋值     -->     <s:textarea name="customer.desc" label="简介" cols="30" rows="5">     </s:textarea>         <!--     5.布尔框标签    1>生成布尔框    2>根据OGNL(customer.marry)取值给布尔框赋值     -->     <s:checkbox name="customer.marry" label="是否已婚" labelposition="left">     </s:checkbox>         <!--     6.1单选框标签(静态)    1>生成单选框    2>根据OGNL(list属性值)创建的Map生成一组radio,其中Map的可以生成radio的value值,    Map的value生成radio的label值    3>根据OGNL(customer.sex)取值来与生成radio 的value比较 ,若与哪个radio的value值    一直,则将其勾选     -->     <s:radio name="customer.sex" list="#{'M':'男','F':'女'} " label="性别"/>         <!--     6.2单选框标签(动态)        1>根据OGNL(list属性值)的取值初始化一组radio,并根据listKey指定的实体类中的属性    来生成radio的value值。根据listValue指定的实体类中的属性来生成radio的label值。    2>根据OGNL(customer.sex)取值来与生成radio 的value比较 ,若与哪个radio的value值    一直,则将其勾选     -->     <s:radio name="customer.sex" list="sexes" listKey="code" listValue="name" label="性别"/>        <!--     7.1多选框标签(静态)    1>生成多选框    2>根据OGNL(list属性值)创建的Map生成一组checkbox,其中Map的可以生成checkbox的value值,    Map的value生成chexkbox的label值    3>根据OGNL(customer.travelCitys)取值来与生成chexkbox 的value比较 ,若与哪个chexkbox的value值    一直,则将其勾选     -->     <s:radio name="customer.travelCitys" list="#{'beijing':'北京','shanghai':'上海','guangzhou':'广州','shenzhen':'深圳','chongqing':'重庆','diaoyudao':'钓鱼岛'} " label="旅游过的城市"/>         </s:form>  </body></html>

刷新浏览器:




接下来,我们再看看如何动态的初始化多选框的选项。先创建城市的实体类city,用于封装所有的城市数据,代码如下:

package entity;public class City {private String code;private String name;public City(String code,String name){super();this.code=code;this.name=name;}public String getCode() {return code;}public void setCode(String code) {this.code = code;}public String getName() {return name;}public void setName(String name) {this.name = name;}}

然后在customerDAO中模拟查询全部的城市,代码如下:

package DAO;import java.util.ArrayList;import java.util.List;import entity.City;import entity.Customer;import entity.Sex;public class CustomerDAO {//模拟根据id查询客户public Customer findById(){Customer c=new Customer();//设置一些默认值c.setName("wonder");c.setPassword("123");c.setDesc("长安大学");c.setSex("M");c.setMarry(false);List<String> list=new ArrayList<String>();list.add("beijing");list.add("shanghai");c.setTravelCities(list);c.setHome("xi'an");return c;}public List<Sex> findALLSex(){List<Sex> list=new ArrayList<Sex>();Sex s1=new Sex();s1.setCode("M");s1.setName("男");list.add(s1);Sex s2=new Sex();s2.setCode("F");s2.setName("女");list.add(s2);Sex s3=new Sex();s3.setCode("o");s3.setName("其他");list.add(s3);return list;}//模拟查询所有的城市public List<City> findAllCities(){List<City> cities=new ArrayList<City>();City c1=new City("beijing", "北京");City c2=new City("shanghai", "上海");City c3=new City("guangzhou", "广州");City c4=new City("shenzhen", "深圳");City c5=new City("chongqing", "重庆");City c6=new City("diaoyudao", "钓鱼岛");cities.add(c1);cities.add(c2);cities.add(c3);cities.add(c4);cities.add(c5);cities.add(c6);return cities;}}


然后在ToUpdatecustomerAction中查询出全部的城市,代码如下:

package action;import java.util.List;import DAO.CustomerDAO;import entity.City;import entity.Customer;import entity.Sex;public class ToUpdateCustomerAction {//outputprivate Customer customer;//客户private List<Sex> sexes;//性别private List<City> cities;//城市public String execute(){CustomerDAO dao=new CustomerDAO();//模拟客户查询customer=dao.findById();//模拟查询全部的性别sexes=dao.findALLSex();//模拟查询全部的城市cities=dao.findAllCities();return "success";}public Customer getCustomer() {return customer;}public void setCustomer(Customer customer) {this.customer = customer;}public List<Sex> getSexes() {return sexes;}public void setSexes(List<Sex> sexes) {this.sexes = sexes;}public List<City> getCities() {return cities;}public void setCities(List<City> cities) {this.cities = cities;}}

最后在update_customer.jsp上,使用动态的多选框标签,根据Action中返回的所有城市生成城市选项,并根据客户信息设置默认勾选,代码如下:

<%@ page  pageEncoding="utf-8"%><%@taglib uri="/struts-tags" prefix="s" %><html>  <head>  </head>    <body>    <h1>模拟修改客户</h1>        <%--1.表单标签 --%>    <s:form action="#" method="post">        <!--     <span style="white-space:pre"></span>2.文本框标签    <span style="white-space:pre"></span>1>生成文本框    <span style="white-space:pre"></span>2>根据OGNL(customer.name)取值给文本框赋值     -->    <span style="white-space:pre"></span> <s:textfield name="customer.name" label="姓名">    <span style="white-space:pre"></span> </s:textfield>    <span style="white-space:pre"></span>     <!--     <span style="white-space:pre"></span>3.密码框标签    <span style="white-space:pre"></span>1>生成密码框    <span style="white-space:pre"></span>2>根据OGNL(customer.password)取值给密码框赋值    -->    <span style="white-space:pre"></span> <s:password name="customer.password" label="密码" showPassword="true"/>    <span style="white-space:pre"></span>      <!--     <span style="white-space:pre"></span>4.文本域标签    <span style="white-space:pre"></span>1>生成文本域    <span style="white-space:pre"></span>2>根据OGNL(customer.desc)取值给文本域赋值     -->    <span style="white-space:pre"></span> <s:textarea name="customer.desc" label="简介" cols="30" rows="5">    <span style="white-space:pre"></span> </s:textarea>    <span style="white-space:pre"></span>     <!--     <span style="white-space:pre"></span>5.布尔框标签    <span style="white-space:pre"></span>1>生成布尔框    <span style="white-space:pre"></span>2>根据OGNL(customer.marry)取值给布尔框赋值     -->    <span style="white-space:pre"></span> <s:checkbox name="customer.marry" label="是否已婚" labelposition="left">    <span style="white-space:pre"></span> </s:checkbox>    <span style="white-space:pre"></span>     <!--     <span style="white-space:pre"></span>6.1单选框标签(静态)    <span style="white-space:pre"></span>1>生成单选框    <span style="white-space:pre"></span>2>根据OGNL(list属性值)创建的Map生成一组radio,其中Map的可以生成radio的value值,    <span style="white-space:pre"></span>Map的value生成radio的label值    <span style="white-space:pre"></span>3>根据OGNL(customer.sex)取值来与生成radio 的value比较 ,若与哪个radio的value值    <span style="white-space:pre"></span>一直,则将其勾选     -->    <span style="white-space:pre"></span> <s:radio name="customer.sex" list="#{'M':'男','F':'女'} " label="性别"/>    <span style="white-space:pre"></span>     <!--     <span style="white-space:pre"></span>6.2单选框标签(动态)    <span style="white-space:pre"></span>    <span style="white-space:pre"></span>1>根据OGNL(list属性值)的取值初始化一组radio,并根据listKey指定的实体类中的属性    <span style="white-space:pre"></span>来生成radio的value值。根据listValue指定的实体类中的属性来生成radio的label值。    <span style="white-space:pre"></span>2>根据OGNL(customer.sex)取值来与生成radio 的value比较 ,若与哪个radio的value值    <span style="white-space:pre"></span>一直,则将其勾选     -->    <span style="white-space:pre"></span> <s:radio name="customer.sex" list="sexes" listKey="code" listValue="name" label="性别"/>    <span style="white-space:pre"></span>    <span style="white-space:pre"></span><!--     <span style="white-space:pre"></span>7.1多选框标签(静态)    <span style="white-space:pre"></span>1>生成多选框    <span style="white-space:pre"></span>2>根据OGNL(list属性值)创建的Map生成一组checkbox,其中Map的可以生成checkbox的value值,    <span style="white-space:pre"></span>Map的value生成chexkbox的label值    <span style="white-space:pre"></span>3>根据OGNL(customer.travelCitys)取值来与生成chexkbox 的value比较 ,若与哪个chexkbox的value值    <span style="white-space:pre"></span>一直,则将其勾选     -->    <span style="white-space:pre"></span> <s:checkboxlist name="customer.travelCitys" list="#{'beijing':'北京','shanghai':'上海','guangzhou':'广州','shenzhen':'深圳','chongqing':'重庆','diaoyudao':'钓鱼岛'}"  label="旅游过的城市"/>    <span style="white-space:pre"></span>     <span style="white-space:pre"></span> <!--     <span style="white-space:pre"></span>7.2单选框标签(动态)    <span style="white-space:pre"></span>1>根据OGNL(list属性值)的取值初始化一组checkbox,并根据listKey指定的实体类中的属性    <span style="white-space:pre"></span>来生成checkbox的value值。根据listValue指定的实体类中的属性来生成checkbox的label值。    <span style="white-space:pre"></span>2>根据OGNL(customer.travelCitys)取值来与生成checkbox 的value比较 ,若与哪个check的value值    <span style="white-space:pre"></span>一直,则将其勾选     -->    <span style="white-space:pre"></span> <s:checkboxlist name="customer.travelCitys" list="cities" listKey="code" listValue="name" label="旅游过的城市"/>     <span style="white-space:pre"></span>     </s:form>  </body></html>


刷新浏览器:



步骤三:下拉选标签

下拉选标签的用法类似,先使用静态方式。代码如下:

 <s:select name="customer.home" list="#{'beijing':'北京','shanghai':'上海','guangzhou':'广州','shenzhen':'深圳','chongqing':'重庆','diaoyudao':'钓鱼岛'}" label="家乡" headerKey="-1" headerValue="请选择"></s:select>

刷新浏览器:



动态初始化代码:

<%@ page  pageEncoding="utf-8"%><%@taglib uri="/struts-tags" prefix="s" %><html>  <head>  </head>    <body>    <h1>模拟修改客户</h1>        <%--1.表单标签 --%>    <s:form action="#" method="post">        <!--     2.文本框标签    1>生成文本框    2>根据OGNL(customer.name)取值给文本框赋值     -->     <s:textfield name="customer.name" label="姓名">     </s:textfield>         <!--     3.密码框标签    1>生成密码框    2>根据OGNL(customer.password)取值给密码框赋值    -->     <s:password name="customer.password" label="密码" showPassword="true"/>          <!--     4.文本域标签    1>生成文本域    2>根据OGNL(customer.desc)取值给文本域赋值     -->     <s:textarea name="customer.desc" label="简介" cols="30" rows="5">     </s:textarea>         <!--     5.布尔框标签    1>生成布尔框    2>根据OGNL(customer.marry)取值给布尔框赋值     -->     <s:checkbox name="customer.marry" label="是否已婚" labelposition="left">     </s:checkbox>         <!--     6.1单选框标签(静态)    1>生成单选框    2>根据OGNL(list属性值)创建的Map生成一组radio,其中Map的可以生成radio的value值,    Map的value生成radio的label值    3>根据OGNL(customer.sex)取值来与生成radio 的value比较 ,若与哪个radio的value值    一直,则将其勾选     -->     <s:radio name="customer.sex" list="#{'M':'男','F':'女'} " label="性别"/>         <!--     6.2单选框标签(动态)        1>根据OGNL(list属性值)的取值初始化一组radio,并根据listKey指定的实体类中的属性    来生成radio的value值。根据listValue指定的实体类中的属性来生成radio的label值。    2>根据OGNL(customer.sex)取值来与生成radio 的value比较 ,若与哪个radio的value值    一直,则将其勾选     -->     <s:radio name="customer.sex" list="sexes" listKey="code" listValue="name" label="性别"/>        <!--     7.1多选框标签(静态)    1>生成多选框    2>根据OGNL(list属性值)创建的Map生成一组checkbox,其中Map的可以生成checkbox的value值,    Map的value生成chexkbox的label值    3>根据OGNL(customer.travelCitys)取值来与生成chexkbox 的value比较 ,若与哪个chexkbox的value值    一直,则将其勾选     -->     <s:checkboxlist name="customer.travelCitys" list="#{'beijing':'北京','shanghai':'上海','guangzhou':'广州','shenzhen':'深圳','chongqing':'重庆','diaoyudao':'钓鱼岛'}"  label="旅游过的城市"/>          <!--     7.2单选框标签(动态)    1>根据OGNL(list属性值)的取值初始化一组checkbox,并根据listKey指定的实体类中的属性    来生成checkbox的value值。根据listValue指定的实体类中的属性来生成checkbox的label值。    2>根据OGNL(customer.travelCitys)取值来与生成checkbox 的value比较 ,若与哪个check的value值    一直,则将其勾选     -->     <s:checkboxlist name="customer.travelCitys" list="cities" listKey="code" listValue="name" label="旅游过的城市"/>            <s:select name="customer.home" list="#{'beijing':'北京','shanghai':'上海','guangzhou':'广州','shenzhen':'深圳','chongqing':'重庆','diaoyudao':'钓鱼岛'}" label="家乡" headerKey="-1" headerValue="请选择"></s:select>            <s:select name="customer.home" list="cities" listKey="code" listValue="name" label="家乡" headerKey="" headerValue="请选择"></s:select>    </s:form>  </body></html>


刷新浏览器:














0 0
原创粉丝点击