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>
刷新浏览器:
- struts2之如何使用复杂的UI标签
- Struts2之如何使用简单的UI标签
- Struts2的标签之UI标签
- Struts2的标签之UI标签
- Struts2的标签之UI标签
- Struts2 标签库 UI标签的使用
- struts2 ui标签使用
- Struts2标签之UI标签
- struts2中ui标签的使用
- 使用Struts2的iterator标签遍历复杂的Map类型
- 使用Struts2的iterator标签遍历复杂的Map类型
- Struts2中UI标签之表单标签的一个例子
- struts2常用UI标签之:Form标签
- struts2常用UI标签之:Form标签
- struts2 标签的使用之s:iterator
- struts2 标签的使用之 s:iterator
- struts2 标签的使用之 s:if
- struts2 标签的使用之 s:iterator
- POJ 1389 Area of Simple Polygons(面积合并,线段树+离散化)
- [LeetCode]maxSubArray(最大子序列和!!!!)
- 幻方填空
- iOS中nil 、NULL、 Nil 、NSNull的区别详谈
- SPI和UART的区别
- struts2之如何使用复杂的UI标签
- Web Crawling and Data Miniing with Apache Nutch(翻译+学习心得)_01
- Spring MVC 框架搭建及详解
- decode和encode
- 【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记37 TableView Delegate
- 排座位
- 12118 - Inspector's Dilemma
- LabView随机生成二维数组
- iOS 重写 isequal方法需重写hash方法