标签:
转载请注明: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 { //output private 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 { //output private 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>
刷新浏览器:
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/uniquewonderq/article/details/46959109