标签:
转载请注明: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