您的位置:首页 > 编程语言 > Java开发

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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: