Struts2标签库(三)之表单标签

来源:互联网 发布:js文件上传原理 编辑:程序博客网 时间:2024/05/22 12:39

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:doubleselectlabel="请选择您喜欢的图书"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:doubleselectlabel="请选择您喜欢的图书"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>












0 0