Struts2标签库(三)之表单标签
2016-02-21 15:27
549 查看
1. checkboxlist标签
checkboxlist标签可以一次创建多个复选框,用于同时生成多个<input type=”checkbox”…/>的HTML标签。它根据list属性指定的集合来生成多个复选框,因此,使用该标签指定一个list属性。如下是常用的两个属性。(1). listKey:该属性指定集合元素中的某个属性(例如集合元素为Person实例,指定Person实例的namen属性)作为复选框的value。如果集合是Map,则可以使用key或value值指定Map对象的key或value作为复选框的value。
(2). listValue:该属性指定元素中的某个属性(例如集合元素为Person实例,指定Person实例的name属性)作为复选框的标签。如果是Map,则可以使用key或value值指定Map对象的key或value作为复选框的标签。
下现笔者通过一个例子来说明。
1) 首先定义两个类,分别是:BookService.java和Book.java
Ø BookService.java
public class BookService { public Book[] getBooks() { return new Book[] { new Book("English","owen"), new Book("Chinese","willaim"), }; } }
Ø Book.java
public class Book { private String name; private String author; // 无参数的构造器 public Book() { } // 初始化全部成员变量的构造器 public Book(String name , String author) { this.name = name; this.author = author; } //省略getter和setter的方法 }
2) JSP视图
<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %> <%@taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>使用s:checkboxlist生成多个复选框</title> <s:head/> </head> <body> <h3>使用s:checkboxlist生成多个复选框</h3> <s:form> <!-- 使用简单集合来生成多个复选框 --> <s:checkboxlist name="a" label="请选择您喜欢的图书" labelposition="top" list="{'三体' , '时间简史' , '引力'}"/> <!-- 使用简单Map对象来生成多个复选框 使用Map对象的key(书名)作为复选框的value, 使用Map对象的value(出版时间)作为复选框的标签--> <s:checkboxlist name="b" label="请选择您想选择出版日期" labelposition="top" list="#{'三体':'2008年9月' ,'时间简史':'2008月12月' ,'引力':'2014年1月'}" listKey="key" listValue="value"/> <!-- 创建一个JavaBean对象,并将其放入Stack Context中 --> <s:bean name="com.owen.app.service.BookService" id="bs"/> <!-- 使用集合里放多个JavaBean实例来生成多个复选框 使用集合元素里name属性作为复选框的标签 使用集合元素里author属性作为复选框的value--> <s:checkboxlist name="b" label="请选择您喜欢的图书" labelposition="top" list="#bs.books" listKey="author" listValue="name"/> </s:form> </body> </html>
2. radio标签
radio标签的用法与checkboxlist的标签用法几乎是相同的,唯一不同的地方是:checkboxlist生成多个复选框,而radio生成多个单选钮。<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %> <%@taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>使用s:radio生成多个单选框</title> <s:head/> </head> <body> <h3>使用s:radio生成多个单选框</h3> <s:form> <!-- 使用简单集合来生成多个单选框 --> <s:radio name="a" label="请选择您喜欢的图书" labelposition="top" list="{'三体','时间简史', '引力'}"/> <!-- 使用简单Map对象来生成多个单选框 --> <s:radio name="b" label="请选择您想选择出版日期" labelposition="top" list="#{'三体':'2008年9月' ,'时间简史':'2008月12月' ,'引力':'2014年1月'}" listKey="key" listValue="value"/> <!-- 创建一个JavaBean实例 --> <s:bean name="com.owen.app.service.BookService" id="bs"/> <!-- 使用集合里放多个JavaBean实例来生成多个单选框 --> <s:radio name="c" label="请选择您喜欢的图书" labelposition="top" list="#bs.books" listKey="author" listValue="name"/> </s:form> </body> </html>
3. select标签
select标签用于生成一个下拉框,使用该标签必须指定list属性,系统会使用list属性指定的集合来生成下拉框的选项。这个list属性指定的集合,既可是普通集合,也可以是Map对象,还可以是其它元素对象的集合。select还有如下几个常见的属性:(1). listKey:该属性指定集合元素中的某个属性作为复选框的value。
(2). listValue:指定集合元素中的某个属性作为复选框的标签。
(3). multiple:设置该列表框是否允许多选。
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>使用s:select生成下拉选择框</title> <s:head/> </head> <body> <h3>使用s:select生成下拉选择框</h3> <s:form> <!-- 使用简单集合来生成下拉选择框 --> <s:select name="a" label="请选择您喜欢的图书" labelposition="top" multiple="true" list="{'三体','时间简史', '引力'}"/> <!-- 使用简单Map对象来生成下拉选择框 --> <s:select name="b" label="请选择您想选择出版日期" labelposition="top" list="#'三体':'2008年9月' ,'时间简史':'2008月12月' ,'引力':'2014年1月'}" listKey="key" listValue="value"/> <!-- 创建一个JavaBean实例 --> <s:bean name="com.owen.app.service.BookService" id="bs"/> <!-- 使用集合里放多个JavaBean实例来生成下拉选择框 --> <s:select name="c" label="请选择您喜欢的图书" labelposition="top" multiple="true" list="#bs.books" listKey="author" listValue="name"/> </s:form> </body> </html>
4. optgroup标签
optgroup标签用于生成一个下拉列表的选项组,因此,该标签必须放在<s:select…/>标签中使用。一个下拉框列表中可以包含多个选项,因此可以在一个<s:select../>标签中使用多个<s:optgroup…/>标签。<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %> <%@taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>使用s:optgroup生成下拉选择框的选项组</title> <s:head/> </head> <body> <h3>使用s:optgroup生成下拉选择框的选项组</h3> <s:form> <!-- 直接使用Map为列表框生成选项 --> <s:select label="选择您喜欢的图书" name="book" size="7" list="#'三体':'2008年9月' ,'时间简史':'2008月12月' ,'引力':'2014年1月'}" listKey="value" listValue="key"> <!-- 使用Map对象来生成选择框的选项组 --> <s:optgroup label="Rod Johnson" list="#{'Expert One-on-One J2EE Design and Development':'Johnson'}" listKey="value" listValue="key"/> <s:optgroup label="David Flanagan" list="#{'JavaScript: The Definitive Guide':'David'}" listKey="value" listValue="key"/> </s:select> </s:form> </body> </html>
5. updownselect标签
updownselect标签的用法非常类似于select标签的用法,区别是该标签生成的列表可以上下移动选项。因此使用该标签时,一样可以指定list、listKey和listValue等属性,这些属性的作用与使用select标签时指定的list、listKey和listVlaue等属性完全相同。updownselect标签支持如下几个属性:(1). allowMoveUp:是否显示“上移”按钮,默认是true.
(2). allowMoveDown:是否显示“下移”按钮,默认是true.
(3). allowSelectAll:是否显示“全选”按钮,默认是true。
(4). moveUpLabel:设置“上移”按钮上的文本,默认是true.
(5). moveDownLabel:设置“下移”按钮的文本,默认是true。
(6). selectAllLabel:设置“全选”按钮上的文本,默认是*符号。
<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %> <%@taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>使用s:updownselect生成可上下移动选项的下拉选择框</title> <s:head/> </head> <body> <h3>使用s:updownselect生成可上下移动选项的下拉选择框</h3> <s:form> <!-- 使用简单集合来生成可上下移动选项的下拉选择框 --> <s:updownselect name="a" label="请选择您喜欢的图书" labelposition="top" moveUpLabel="向上移动" list="{'三体' , '时间简史' , '引力'}"/> <!-- 使用简单Map对象来生成可上下移动选项的下拉选择框 且使用emptyOption="true"增加一个空选项--> <s:updownselect name="b" label="请选择您想选择出版日期" labelposition="top" moveDownLabel="向下移动" list="#{'三体':'2008年9月' ,'时间简史':'2008月12月' ,'引力':'2014年1月'}" listKey="key" emptyOption="true" listValue="value"/> <s:bean name="com.owen.app.service.BookService" id="bs"/> <!-- 使用集合里放多个JavaBean实例来可上下移动选项的生成下拉选择框 --> <s:updownselect name="c" label="请选择您喜欢的图书的作者" labelposition="top" selectAllLabel="全部选择" multiple="true" list="#bs.books" listKey="author" listValue="name"/> </s:form> </body> </html>
6. doubleselect标签
double标签会生成一个级联列表框,当选择第一个下拉框列表时,第二个列表框的内容随之改变。常见的如下。(1). list:指定用于输出第一个下拉框列表中选项的集合。
(2). listKey:指定集合元素中某个属性作为第一个下拉列表的value。
(3). listValue:指定集合元素中的某个属性作为复选框的标签。
(4). doubleList:指定用于输出第二个下拉框中选项的集合。
(5). doubleListKey:指定集合元素中某个属性作为第二个下拉列表框的value.
(6). doubleListValue:指定集合元素中某个属性作为第二个下拉框的标签。
<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %> <%@taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>使用s:doubleselect生成级联下拉列表框</title> <s:head/> </head> <body> <h3>使用s:doubleselect生成级联下拉列表框</h3> <s:form action="x"> <s:doubleselect label="请选择您喜欢的图书" name="author" list="{'owen', 'David'}" doubleList="top == 'owen' ? {'轻量级Java EE企业应用实战', '三体','时间简史'}: {'JavaScript: The Definitive Guide'}" doubleName="book"/> </s:form> </body> </html>
如果是Map,则例子如下:
<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %> <%@taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>使用s:doubleselect生成级联下拉列表框</title> <s:head/> </head> <body> <h3>使用s:doubleselect生成级联下拉列表框</h3> <!-- 创建一个复杂的Map对象,key为普通字符串,value为集合 --> <s:set name="bs" value="#{'owen': {'三体', ' java虚拟机','架构'}, 'David': {'JavaScript: The Definitive Guide'}, 'Johnson': {'Expert One-on-One J2EE Design and Development'}}"/> <!-- 使用Map对象来生成级联列表框 --> <s:form action="x"> <s:doubleselect label="请选择您喜欢的图书" size="3" name="author" list="#bs.keySet()" doubleList="#bs[top]" doubleSize="3" doubleName="book"/> </s:form> </body> </html>
7. optiontransferselect标签
optiontransferselect标签会生成两个列表框,并生成系列的按钮用于控制各选项在两个下拉框列表之间移动、升级等。当提交该列表表单时,两个列表选择框对应的请求参数都会被提交。<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>使用s:optiontransferselect来生成可移动列表项的下拉列表框</title> <s:head/> </head> <body> <h3>使用s:optiontransferselect来生成可移动列表项的下拉列表框</h3> <s:form> <!-- 使用简单集合对象来生成可移动的下拉列表框 --> <s:optiontransferselect label="请选择你喜欢的图书" name="cnbook" leftTitle="中文图书:" rightTitle="外文图书" list="{'时间简史' ,'三体 ', 'java虚拟机'}" multiple="true" addToLeftLabel="向左移动" selectAllLabel="全部选择" addAllToRightLabel="全部右移" headerKey="cnKey" headerValue="--- 选择中文图书 ---" emptyOption="true" doubleList="{'Expert One-on-One J2EE Design and Development', 'JavaScript: The Definitive Guide'}" doubleName="enBook" doubleHeaderKey="enKey" doubleHeaderValue="--- 选择外文图书 ---" doubleEmptyOption="true" doubleMultiple="true" /> </s:form> </body> </html>
8. token标签
这是一个用于防止重复提交表单的标签,token标签能阻止重复提交表单的问题(避免在刷新页面的重复提交)。如果需要该标签起作用,则应该在Struts2的配置文件中启用TokenInterceptor拦截器或TokenSessionInterception拦截器。然后在JSP页面的表单中添加<s:token/>.注意:如果表单没有使用<s:token/>标签,则不要使用token的拦截器,不然提交会出错。
<?xml version="1.0" encoding="GBK"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.i18n.encoding" value="GBK"/> <package name="lee" extends="struts-default"> <!-- 定义名为pro的Action,其实现类为ProAction --> <action name="pro" class="com.owen.app.action.ProAction"> <!-- 使用系统默认的拦截器栈 --> <interceptor-ref name="defaultStack"/> <!-- 使用防刷新的token拦截器 --> <interceptor-ref name="token"/> <!-- 定义重复提交转向的视图,该逻辑视图名必须是invalid.token --> <result name="invalid.token">/WEB-INF/content/refresh.jsp</result> <!-- 如果处理结果返回success,对应/show.jsp视图资源 --> <result>/WEB-INF/content/show.jsp</result> </action> <action name="*"> <result>/WEB-INF/content/{1}.jsp</result> </action> </package> </struts>
相关文章推荐
- java 注解的基本原理和编程实现
- Java基础学习11_异常与异常处理
- Android studio快捷键更改为eclipse详情
- 【Java】----数据类型和基本数据类型转换
- Struts2的标签库(二)之数据标签
- 【慕课笔记】第三章 JAVA中必须了解的常用类 第3节 JAVA中基本类型和字符串之间的转换
- SpringMail使用过程中的报错
- Struts2的标签库(一)之控制标签
- Struts2 用ModelDriven接收参数
- java.rmi.UnmarshalException:errorunmarshalling return; java.lang.ClassNotFoundException的解决方法
- Struts2 用DomainModel接收参数
- 解决eclipse中the import java.util cannot be resolved问题(总结)
- 通过SpringMVC整合基于注解的JPA的实例教程代码下载
- JAVA多线程-Lock的使用(三)-Lock与Condiition相关的方法
- Struts2 用action属性接收参数
- springMVC2 1入门程序
- JAVA IO(一)字符集与字符编码简介
- WebService调用天气接口例子
- 使用Gradle构建简单Java项目
- Java排序算法--》快速排序