本章学习目标

· 闇练节制掌握标签

· 闇练节制数据标签

struts2标签jspJAVAEE框架技巧教程之第3章 Struts2标签库 React

· 闇练节制表单标签

· 理解其他标签

· 节制OGNL表达式措辞

在JavaWeb阶段,JSP标签库能够简化JSP的开拓,避免JSP中嵌入大量Java脚本,同样的,常见的Web层框架也供应了自己特有的标签库,包括Struts2,它供应的标签库功能非常丰富,大大简化了开拓,本章将详细讲解Struts2的标签库。

3.1 Struts2标签库概述

3.1.1 Struts2标签的分类

Struts2供应的标签库功能很强大,利用很大略,不依赖任何表现层技能,不仅可以在JSP页面中利用,也可以在其他页面中利用,例如FreeMarker等。

Struts2框架的标签库可以分为以下三类。

1.UI标签

UI标签紧张用于天生HTML元素的标签,里面包含表单标签和非表单标签,个中表单标签紧张用于天生HTML页面的form元素,以及普通表单元素的标签。
非表单标签紧张用于天生页面上的tree、tab页等。

2.非UI标签

非UI标签紧张用于数据访问,逻辑掌握,里面包含数据访问标签和流程掌握标签,个中数据访问标签紧张包含用于输出值栈中的值,完成国际化等功能。
流程掌握标签紧张用于实现分支、循环等流程的掌握。

3.Ajax标签

Ajax标签用的比较少,这里不做深入谈论,如果读者有兴趣,可以自己查阅干系资料。

3.1.2 Struts2标签库的导入

在第一章中下载的struts-2.5.10.1-all.zip的lib目录下,有一个struts2-core-2.5.10.1.jar文件,该文件中包含了标签的处理类和描述文件,解压此文件,在META-INF目录下可以找到struts-tags.tld文件,该文件便是Struts2的标签库描述文件。

在JSP中利用标签库时,必须利用taglib指令引入标签库,详细示例如下。

<%@taglib prefix=&#34;s" uri="/struts-tags"%>

如上示例中,prefix="s"指定了利用此标签库时的前缀,uri="/struts-tags"指定了标签库描述文件的路径,如果项目采取的Servlet规范版本是2.3或以下,还须要在web.xml中增加对标签库的定义,详细示例如下。

<taglib>

<taglib-uri>

/struts-tags

</taglib-uri>

<taglib-location>

/WEB-INF/lib/struts2-core-2.5.10.1.jar

</taglib-location>

</taglib>

先容完标签库的导入,接下来将详细讲解每一类标签的利用。

3.2 流程掌握标签

流程掌握标签紧张用于流程的掌握,例如分支、循环等操作,除此之外,还可以完成对凑集的合并、排序等操作,接下来详细先容流程掌握标签。

3.2.1 if标签

if标签与java的语法一样,做为条件判断来利用,标签内有一个test属性吸收布尔类型参数,以此来判断输出的内容,接下来通过一个案例来演示if标签的利用,如例3-1所示。

例3-1 if.jsp

1 <%@ page language="java" contentType="text/html; charset=UTF-8"

2 pageEncoding="UTF-8"%>

3 <%@taglib prefix="s" uri="/struts-tags"%>

4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

5 "http://www.w3.org/TR/html4/loose.dtd">

6 <html>

7 <head>

8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

9 <title>Insert title here</title>

10 </head>

11 <body>

12 <center>

13 <h1>

14 <s:if test="true">精确</s:if>

15 <s:if test="false">缺点</s:if>

16 </h1>

17 </center>

18 </body>

19 </html>

例3-1的代码编写完成后,运行项目,在浏览器访问项眼前的if.jsp,运行效果如图3.1所示。

图3.1 if.jsp

图3.1中,if.jsp页面显示"精确",由于例3-1中,s:if标签的test属性判断是否为true,为true就输出标签体,为false则隐蔽标签体。

3.2.2 generator标签

generator标签是一个字符串解析器,用于将一个字符串解析成一个凑集,接下来通过一个案例来演示generator标签的利用,如例3-2所示。

例3-2 generator.jsp

1 <%@ page language="java" contentType="text/html; charset=UTF-8"

2 pageEncoding="UTF-8"%>

3 <%@taglib prefix="s" uri="/struts-tags"%>

4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

5 "http://www.w3.org/TR/html4/loose.dtd">

6 <html>

7 <head>

8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

9 <title>Insert title here</title>

10 </head>

11 <body>

12 <center>

13 <s:generator val="'Java,C#,C++'" separator=",">

14 <s:iterator>

15 <s:property />

16 </s:iterator>

17 </s:generator>

18 </center>

19 </body>

20 </html>

例3-2的代码编写完成后,运行项目,在浏览器访问项眼前的if.jsp,运行效果如图3.2所示。

图3.2 generator.jsp

图3.2中,generator.jsp页面显示"Java C# C++",在例3-2中,利用generator标签,将字符串解析,根据逗号进行分割,解析完成后,通过iterator标签遍历解析完成后的凑集,通过property标签显示凑集内容。

3.2.3 iterator标签

iterator标签是一个迭代器,用于将凑集迭代输出,接下来通过一个案例来演示iterator标签的利用,如例3-3所示。

例3-3 iterator.jsp

1 <%@ page language="java" contentType="text/html; charset=UTF-8"

2 pageEncoding="UTF-8"%>

3 <%@taglib prefix="s" uri="/struts-tags"%>

4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

5 "http://www.w3.org/TR/html4/loose.dtd">

6 <html>

7 <head>

8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

9 <title>Insert title here</title>

10 </head>

11 <body>

12 <center>

13 <s:iterator value="{'1','2','3','4','5'}">

14 <s:property />

15 </s:iterator>

16 </center>

17 </body>

18 </html>

例3-3的代码编写完成后,运行项目,在浏览器访问项眼前的iterator.jsp,运行效果如图3.3所示。

图3.3 iterator.jsp

图3.3中,iterator.jsp页面显示"1 2 3 4 5",在例3-3中,在iterator标签中用value属性声明要遍历的凑集,然后通过property标签显示凑集内容。

3.2.4 subset标签

subset标签用于截取凑集的部分元素,形成新的子凑集,接下来通过一个案例来演示subset标签的利用,如例3-4所示。

例3-4 subset.jsp

1 <%@ page language="java" contentType="text/html; charset=UTF-8"

2 pageEncoding="UTF-8"%>

3 <%@taglib prefix="s" uri="/struts-tags"%>

4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

5 "http://www.w3.org/TR/html4/loose.dtd">

6 <html>

7 <head>

8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

9 <title>Insert title here</title>

10 </head>

11 <body>

12 <center>

13 <table border="1" width="200">

14 <s:subset source="{'Java','C#','C++','PHP','Python'}"

15 start="1" count="3">

16 <s:iterator>

17 <td><s:property /></td>

18 </s:iterator>

19 </s:subset>

20 </table>

21 </center>

22 </body>

23 </html>

例3-4的代码编写完成后,运行项目,在浏览器访问项眼前的subset.jsp,运行效果如图3.4所示。

图3.4 subset.jsp

图3.4中,subset.jsp页面显示"C# C++ PHP",在例3-4中,在subset标签中用source属性指定源凑集,用start属性指定从索引为1的元素开始取,这里索引从0开始,也便是从第二个元素开始取,末了用count指定子集中元素的个数为3,以是取得了三个元素,形成新的子集,然后通过iterator标签和property标签进行遍历显示。

3.3 数据访问标签

数据访问标签紧张用于各种数据访问干系的功能以及Action的调用等,接下来详细先容数据访问标签。

3.3.1 action标签

action标签用于在jsp页面中直接调用Action,接下来通过一个案例来演示action标签的利用,首先编写后台代码,如例3-5所示。

例3-5 MyAction.java

1 import com.opensymphony.xwork2.ActionSupport;

2 public class MyAction extends ActionSupport {

3 private static final long serialVersionUID = 1L;

4 public void myMethod() {

5 System.out.println("myMethod方法被调用了!");

6 }

7 }

接着在struts.xml文件中编写映射关系,如例3-6所示。

例3-6 struts.xml

1 <?xml version="1.0" encoding="UTF-8"?>

2 <!DOCTYPE struts PUBLIC

3 "-//Apache Software Foundation//DTD Struts

4 Configuration 2.5//EN"

5 "http://struts.apache.org/dtds/struts-2.5.dtd">

6 <struts>

7 <constant name="struts.enable.DynamicMethodInvocation"

8 value="false" />

9 <constant name="struts.devMode" value="true" />

10 <package name="default" namespace="/"

11 extends="struts-default">

12 <action name="myAction"

13 class="com.qianfeng.struts.action.MyAction"

14 method="myMethod">

15 </action>

16 </package>

17 </struts>

末了编写action.jsp页面,如例3-7所示。

例3-7 action.jsp

1 <%@ page language="java" contentType="text/html; charset=UTF-8"

2 pageEncoding="UTF-8"%>

3 <%@taglib prefix="s" uri="/struts-tags"%>

4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

5 "http://www.w3.org/TR/html4/loose.dtd">

6 <html>

7 <head>

8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

9 <title>Insert title here</title>

10 </head>

11 <body>

12 <center>

13 <s:action name="myAction" namespace="/"

14 executeResult="false">

15 </s:action>

16 </center>

17 </body>

18 </html>

代码编写完成后,运行项目,在浏览器访问项眼前的action.jsp,掌握台会打印出"myMethod方法被调用了!"运行效果如图3.5所示。

图3.5 掌握台

在例3-5中,编写了一个Action实现类,自定义了一个myMethod方法,方法内在掌握台输出"myMethod方法被调用了!",例3-6中在struts.xml配置文件中,定义name为myAction的实现类,例3-7中在页面直策应用action标签访问name为myAction的Action。

3.3.2 bean标签

bean标签用于创建一个JavaBean的实例,可以通过bean标签的子标签param给JavaBean传入参数,接下来通过一个案例来演示bean标签的利用,首先新建一个JavaBean的类,这里将类建在com.qianfeng.struts.entity包下,如例3-8所示。

例3-8 Student.java

1 package com.qianfeng.struts.entity;

2 public class Student {

3 private String name;

4 private int age;

5 public String getName() {

6 return name;

7 }

8 public void setName(String name) {

9 this.name = name;

10 }

11 public int getAge() {

12 return age;

13 }

14 public void setAge(int age) {

15 this.age = age;

16 }

17 @Override

18 public String toString() {

19 return "Student [name=" + name + ", age=" + age + "]";

20 }

21 }

接下来编写bean.jsp页面,如例3-9所示。

例3-9 bean.jsp

1 <%@ page language="java" contentType="text/html; charset=UTF-8"

2 pageEncoding="UTF-8"%>

3 <%@taglib prefix="s" uri="/struts-tags"%>

4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

5 "http://www.w3.org/TR/html4/loose.dtd">

6 <html>

7 <head>

8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

9 <title>Insert title here</title>

10 </head>

11 <body>

12 <center>

13 <s:bean name="com.qianfeng.struts.entity.Student" var="s">

14 <s:param name="name" value="'lily'" />

15 <s:param name="age" value="21" />

16 </s:bean>

17 Person实例的name为:<s:property value="#s.name" />

18 <br>

19 Person实例的age为:<s:property value="#s.age" />

20 </center>

21 </body>

22 </html>

代码编写完成后,运行项目,在浏览器访问项眼前的bean.jsp,运行效果如图3.6所示。

图3.6 bean.jsp

在例3-8中,创建了一个Student实体类,在例3-9中,直策应用bean标签的name属性指定要创建的实体类是在com.qianfeng.struts.entity包下的Student,var属性指定别名为s,在子标签param中,分别指定了实体类的name和age属性值,创建完成后,通过property标签取到了创建好的实例的值,这里实际上是将类的实例放到了值栈的栈顶,关于值栈会在后面详细讲解。

3.3.3 date标签

date标签用于日期的干系操作,例如日期格式化,接下来通过一个案例来演示date标签的利用,如例3-10所示。

例3-10 date.jsp

1 <%@ page language="java" contentType="text/html; charset=UTF-8"

2 pageEncoding="UTF-8"%>

3 <%@taglib prefix="s" uri="/struts-tags"%>

4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

5 "http://www.w3.org/TR/html4/loose.dtd">

6 <html>

7 <head>

8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

9 <title>Insert title here</title>

10 </head>

11 <body>

12 <%

13 java.util.Date now = new java.util.Date();

14 pageContext.setAttribute("now", now);

15 %>

16 <center>

17 <s:date name="#attr.now" format="yyyy/MM/dd" />

18 </center>

19 </body>

20 </html>

例3-10的代码编写完成后,运行项目,在浏览器访问项眼前的date.jsp,运行效果如图3.7所示。

图3.7 date.jsp

图3.7中,bean.jsp页面显示了格式化后确当前韶光,在例3-10中,通过java脚本创建了一个Date工具now,赋值为当前韶光,将now设置到了page域中,指定date标签的name属性为now,用format属性指定了日期的格式。

3.4 表单标签

表单标签对应着HTML中的表单元素,Struts2表单标签供应了很多大略易用的属性,大大提高开拓效率,开拓时,这些表单属性实际上对应着Action中的属性值,Struts2框架会将提交的表单信息直接赋给对应的Action属性,接下来详细先容表单标签。

3.4.1 form标签

form标签用于定义form表单,接下来通过一个案例来演示form标签的利用,如例3-11所示。

例3-11 form.jsp

1 <%@ page language="java" contentType="text/html; charset=UTF-8"

2 pageEncoding="UTF-8"%>

3 <%@taglib prefix="s" uri="/struts-tags"%>

4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

5 "http://www.w3.org/TR/html4/loose.dtd">

6 <html>

7 <head>

8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

9 <title>Insert title here</title>

10 </head>

11 <body>

12 <center>

13 <s:form action="login">

14 用户名:<input type="text" name="username" />

15 <br />

16 密   码:<input type="password" name="password" />

17 <br />

18 <input type="submit" value="提交" />

19 </s:form>

20 </center>

21 </body>

22 </html>

例3-11的代码编写完成后,运行项目,在浏览器访问项眼前的form.jsp,运行效果如图3.8所示。

图3.8

图3.9 form.jsp

图3.8中,form.jsp页面了一个上岸的表单,在例3-11中,在form标签中写了三个input标签,定义表单中的内容,有用户名、密码和提交。

3.4.2 textfield标签

textfield标签用于定义普通文本输入框,接下来通过一个案例来演示textfield标签的利用,如例3-12所示。

例3-12 textfield.jsp

1 <%@ page language="java" contentType="text/html; charset=UTF-8"

2 pageEncoding="UTF-8"%>

3 <%@taglib prefix="s" uri="/struts-tags"%>

4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

5 "http://www.w3.org/TR/html4/loose.dtd">

6 <html>

7 <head>

8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

9 <title>Insert title here</title>

10 </head>

11 <body>

12 <center>

13 <s:form action="login">

14 <s:textfield name="username" label="用户名" />

15 </s:form>

16 </center>

17 </body>

18 </html>

例3-12的代码编写完成后,运行项目,在浏览器访问项眼前的textfield.jsp,运行效果如图3.9所示。

图3.10 textfield.jsp

图3.9中,textfield.jsp页面显示用户名输入框,例3-12中,首先定义表单,然后在textfield标签中用name属性指定文本框的名字,用label属性指定文本框前的描述笔墨。

3.4.3 password标签

password标签用于定义一个密码框,接下来通过一个案例来演示password标签的利用,如例3-13所示。

例3-13 password.jsp

1 <%@ page language="java" contentType="text/html; charset=UTF-8"

2 pageEncoding="UTF-8"%>

3 <%@taglib prefix="s" uri="/struts-tags"%>

4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

5 "http://www.w3.org/TR/html4/loose.dtd">

6 <html>

7 <head>

8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

9 <title>Insert title here</title>

10 </head>

11 <body>

12 <center>

13 <s:form action="login">

14 <s:password name="password" label="密码" />

15 </s:form>

16 </center>

17 </body>

18 </html>

例3-8的代码编写完成后,运行项目,在浏览器访问项眼前的password.jsp,运行效果如图3.10所示。

图3.11 password.jsp

图3.10中,password.jsp页面显示了一个密码文本框,输入的密码隐式显示,在例3-13中,首先定义表单,然后在password标签中用name属性指定文本框的名字,用label属性指定文本框前的描述笔墨。

3.4.4 radio标签

radio标签用于定义单选框,接下来通过一个案例来演示radio标签的利用,如例3-14所示。

例3-14 radio.jsp

1 <%@ page language="java" contentType="text/html; charset=UTF-8"

2 pageEncoding="UTF-8"%>

3 <%@taglib prefix="s" uri="/struts-tags"%>

4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

5 "http://www.w3.org/TR/html4/loose.dtd">

6 <html>

7 <head>

8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

9 <title>Insert title here</title>

10 </head>

11 <body>

12 <center>

13 <s:form action="login">

14 <s:radio list="#{1:'男',0:'女'}" name="sex" value="1"

15 label="性别" />

16 </s:form>

17 </center>

18 </body>

19 </html>

例3-14的代码编写完成后,运行项目,在浏览器访问项眼前的radio.jsp,运行效果如图3.11所示。

图3.12 radio.jsp

图3.11中,radio.jsp页面显示了一个单选项,默认选择"男",在例3-14中,首先定义表单,然后在radio标签中用list属性指定单选项的内容,用value属性指定默认值为1,也便是默认选择"男",用name属性指定单选框的名字,用label属性指定文本框前的描述笔墨。

3.4.5 checkboxlist标签

checkboxlist标签用于定义多选框,接下来通过一个案例来演示checkboxlist标签的利用,如例3-15所示。

例3-15 checkboxlist.jsp

1 <%@ page language="java" contentType="text/html; charset=UTF-8"

2 pageEncoding="UTF-8"%>

3 <%@taglib prefix="s" uri="/struts-tags"%>

4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

5 "http://www.w3.org/TR/html4/loose.dtd">

6 <html>

7 <head>

8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

9 <title>Insert title here</title>

10 </head>

11 <body>

12 <center>

13 <s:form action="login">

14 <s:checkboxlist list="#{1:'足球',2:'篮球',3:'羽毛球'}"

15 name="love" label="爱好" />

16 </s:form>

17 </center>

18 </body>

19 </html>

例3-15的代码编写完成后,运行项目,在浏览器访问项眼前的checkboxlist.jsp,运行效果如图3.12所示。

图3.13 checkboxlist.jsp

图3.12中,checkboxlist.jsp页面显示了一个多选框,在例3-15中,首先定义表单,然后在checkboxlist标签中用list属性指定多选框的内容,用name属性指定多选框的名字,用label属性指定文本框前的描述笔墨。

3.4.6 select标签

select标签用于定义下拉选项,接下来通过一个案例来演示select标签的利用,如例3-16所示。

例3-16 select.jsp

1 <%@ page language="java" contentType="text/html; charset=UTF-8"

2 pageEncoding="UTF-8"%>

3 <%@taglib prefix="s" uri="/struts-tags"%>

4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

5 "http://www.w3.org/TR/html4/loose.dtd">

6 <html>

7 <head>

8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

9 <title>Insert title here</title>

10 </head>

11 <body>

12 <center>

13 <s:form action="login">

14 <s:select name="aa" list="{}" label="喜好的歌手" headerKey="-1"

15 headerValue="--歌手--">

16 <s:optgroup list="#{1:'刘德华',2:'成龙',3:'周华健'}"

17 label="男歌手" />

18 <s:optgroup list="#{1:'那英',2:'刘若英',3:'王心凌'}"

19 label="女歌手" />

20 </s:select>

21 </s:form>

22 </center>

23 </body>

24 </html>

例3-16的代码编写完成后,运行项目,在浏览器访问项眼前的select.jsp,运行效果如图3.13所示。

图3.14 select.jsp

图3.13中,select.jsp页面显示了一个下拉选项,在例3-16中,首先定义表单,然后在select标签中用headerValue属性指定下拉选项第一项的值,用optgroup子标签指定下拉项中的分类选项,用label属性指定文本框前的描述笔墨。

3.4.7 textarea标签

textarea标签用于定义文本域,接下来通过一个案例来演示textarea标签的利用,如例3-17所示。

例3-17 textarea.jsp

1 <%@ page language="java" contentType="text/html; charset=UTF-8"

2 pageEncoding="UTF-8"%>

3 <%@taglib prefix="s" uri="/struts-tags"%>

4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

5 "http://www.w3.org/TR/html4/loose.dtd">

6 <html>

7 <head>

8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

9 <title>Insert title here</title>

10 </head>

11 <body>

12 <center>

13 <s:form action="login">

14 <s:textarea name="area" label="备注" />

15 </s:form>

16 </center>

17 </body>

18 </html>

例3-17的代码编写完成后,运行项目,在浏览器访问项眼前的textarea.jsp,运行效果如图3.14所示。

图3.15 textarea.jsp

图3.14中,textarea.jsp页面显示了一个文本域,在例3-17中,首先定义表单,然后在textarea标签中用name属性指定文本域的名字,用label属性指定文本框前的描述笔墨。

3.4.8 submit标签

submit标签用于定义表单提交按钮,接下来通过一个案例来演示submit标签的利用,如例3-18所示。

例3-18 submit.jsp

1 <%@ page language="java" contentType="text/html; charset=UTF-8"

2 pageEncoding="UTF-8"%>

3 <%@taglib prefix="s" uri="/struts-tags"%>

4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

5 "http://www.w3.org/TR/html4/loose.dtd">

6 <html>

7 <head>

8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

9 <title>Insert title here</title>

10 </head>

11 <body>

12 <center>

13 <s:form action="login">

14 <s:textfield name="username" label="用户名" />

15 <s:password name="password" value="" label="密码" />

16 <s:radio list="#{1:'男',0:'女'}" name="sex" value="1"

17 label="性别" />

18 <s:checkboxlist list="#{1:'足球',2:'篮球',3:'羽毛球'}"

19 name="love" label="爱好" />

20 <s:select name="aa" list="{}" label="喜好的歌手"

21 headerKey="-1" headerValue="--歌手--">

22 <s:optgroup list="#{1:'刘德华',2:'成龙',3:'周华健'}"

23 label="男歌手" />

24 <s:optgroup list="#{1:'那英',2:'刘若英',3:'王心凌'}"

25 label="女歌手" />

26 </s:select>

27 <s:textarea name="area" label="备注" />

28 <s:submit value="注册" action="xxx" />

29 </s:form>

30 </center>

31 </body>

32 </html>

例3-18的代码编写完成后,运行项目,在浏览器访问项眼前的submit.jsp,运行效果如图3.15所示。

图3.16 submit.jsp

图3.15中,submit.jsp页面显示了一个表单,表单最下边有一个提交按钮,可以提交全体表单到一个action,在例3-18中,首先定义表单,表单中定义了各种须要填写的项,末了用submit标签定义了一个提交按钮用于提交表单。

3.5 其他标签

讲解完大部分标签后,还须要理解一些其他标签,以便提高开拓效率。

3.5.1 a标签

a标签用于定义超链接,接下来通过一个案例来演示a标签的利用,首先编写后台代码,如例3-19所示。

例3-19 TestAction.java

1 import com.opensymphony.xwork2.ActionSupport;

2 public class TestAction extends ActionSupport {

3 private static final long serialVersionUID = 1L;

4 public String execute() {

5 return SUCCESS;

6 }

7 }

接着在struts.xml文件中编写映射关系,如例3-20所示。

例3-20 struts.xml

1 <?xml version="1.0" encoding="UTF-8"?>

2 <!DOCTYPE struts PUBLIC

3 "-//Apache Software Foundation//DTD Struts

4 Configuration 2.5//EN"

5 "http://struts.apache.org/dtds/struts-2.5.dtd">

6 <struts>

7 <constant name="struts.enable.DynamicMethodInvocation"

8 value="false" />

9 <constant name="struts.devMode" value="true" />

10 <package name="default" namespace="/"

11 extends="struts-default">

12 <action name="testAction"

13 class="com.qianfeng.struts.action.TestAction"

14 method="execute">

15 <result name="success">/target.jsp</result>

16 </action>

17 </package>

18 </struts>

接着编写前台页面a.jsp页面,如例3-21所示。

例3-21 a.jsp

1 <%@ page language="java" contentType="text/html; charset=UTF-8"

2 pageEncoding="UTF-8"%>

3 <%@taglib prefix="s" uri="/struts-tags"%>

4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

5 "http://www.w3.org/TR/html4/loose.dtd">

6 <html>

7 <head>

8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

9 <title>Insert title here</title>

10 </head>

11 <body>

12 <center>

13 <h1>

14 <s:a href="testAction.action">

15 跳转到target页面

16 </s:a>

17 </h1>

18 </center>

19 </body>

20 </html>

末了编写target.jsp页面,如例3-22所示。

例3-22 target.jsp

1 <%@ page language="java" contentType="text/html; charset=UTF-8"

2 pageEncoding="UTF-8"%>

3 <%@taglib prefix="s" uri="/struts-tags"%>

4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

5 "http://www.w3.org/TR/html4/loose.dtd">

6 <html>

7 <head>

8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

9 <title>Insert title here</title>

10 </head>

11 <body>

12 <center>

13 <h1>

14 <h1>target页面</h1>

15 </h1>

16 </center>

17 </body>

18 </html>

代码编写完成后,运行项目,在浏览器访问项眼前的a.jsp,运行效果如图3.16所示。

图3.17 a.jsp

点击"跳转到target"页面,运行效果如图3.17所示。

图3.18 target.jsp

在例3-21中,用a标签发送了testAction.action的要求,struts.xml会根据要求,自动找到实现类,实现类中返回了success字符串,根据返回值,跳转到了target.jsp页面。

3.5.2 actionerror、actionmessage、fielderror标签

actionerror标签用于输出错误信息到客户端,输出的内容通过getActionErrors()方法得到,actionmessage标签用于输出提示信息到客户端,输出的内容通过getActionMessages()方法得到,fielderror标签用于输出fieldErrors属性保存的字段缺点,fieldErrors是一个Map类型的属性,接下来通过一个案例来演示这三个标签的利用,首先编写后台代码,如例3-23所示。

例3-23 error.java

1 import com.opensymphony.xwork2.ActionSupport;

2 public class ErrorAction extends ActionSupport {

3 private static final long serialVersionUID = 1L;

4 public String execute() {

5 addActionError("第一个error");

6 addActionError("第二个error");

7 addActionMessage("第一个message");

8 addActionMessage("第二个message");

9 addFieldError("f1", "第一个fieldError");

10 addFieldError("f2", "第二个fieldError");

11 return SUCCESS;

12 }

13 }

接着在struts.xml文件中编写映射关系,如例3-24所示。

例3-24 struts.xml

1 <?xml version="1.0" encoding="UTF-8"?>

2 <!DOCTYPE struts PUBLIC

3 "-//Apache Software Foundation//DTD Struts

4 Configuration 2.5//EN"

5 "http://struts.apache.org/dtds/struts-2.5.dtd">

6 <struts>

7 <constant name="struts.enable.DynamicMethodInvocation"

8 value="false" />

9 <constant name="struts.devMode" value="true" />

10 <package name="default" namespace="/"

11 extends="struts-default">

12 <action name="errorAction"

13 class="com.qianfeng.struts.action.ErrorAction"

14 method="execute">

15 <result name="success">/error.jsp</result>

16 </action>

17 </package>

18 </struts>

接着编写前台页面src.jsp页面,如例3-25所示。

例3-25 src.jsp

1 <%@ page language="java" contentType="text/html; charset=UTF-8"

2 pageEncoding="UTF-8"%>

3 <%@taglib prefix="s" uri="/struts-tags"%>

4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

5 "http://www.w3.org/TR/html4/loose.dtd">

6 <html>

7 <head>

8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

9 <title>Insert title here</title>

10 </head>

11 <body>

12 <center>

13 <h1>

14 <s:a href="errorAction.action">

15 跳转到error.jsp页面

16 </s:a>

17 </h1>

18 </center>

19 </body>

20 </html>

末了编写error.jsp页面,如例3-26所示。

例3-26 error.jsp

1 <%@ page language="java" contentType="text/html; charset=UTF-8"

2 pageEncoding="UTF-8"%>

3 <%@taglib prefix="s" uri="/struts-tags"%>

4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

5 "http://www.w3.org/TR/html4/loose.dtd">

6 <html>

7 <head>

8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

9 <title>Insert title here</title>

10 </head>

11 <body>

12 <center>

13 <s:actionerror />

14 <s:actionmessage />

15 <s:fielderror />

16 </center>

17 </body>

18 </html>

代码编写完成后,运行项目,在浏览器访问项眼前的src.jsp,运行效果如图3.18所示。

图3.19 src.jsp

点击"跳转到error.jsp页面",页面直接跳转到error.jsp,运行效果如图3.19所示。

图3.1 src.jsp

代码运行后,error.jsp页面显示了Action中设置的值,此处只需理解这三个标签的利用,须要人为地在Action中加入对应的信息时直接套用即可。

3.6 OGNL表达式措辞

3.6.1 OGNL和值栈

3.6.2 OGNL常用符号

3.6.3 OGNL凑集操作

3.7 本章小结

本章先容了Struts2标签库中的标签,紧张包括流程掌握标签、数据访问标签、表单标签和一些非表单标签,末了先容了OGNL与值栈的干系知识,这里须要读者结合实践去理解,本章的内容不须要去背,反复练习自然能闇练节制。

3.8 习题

1.填空题

(1) 标签紧张用于天生HTML元素的标签,里面包含表单标签和非表单标签。

(2) 标签紧张用于流程的掌握,例如分支、循环等操作。

(3) 标签紧张用于各种数据访问干系的功能以及Action的调用等。

(4) form标签用于定义

(5) 标签用于输出错误信息到客户端。

2.选择题

(1)下列不是Struts2标签类别的是( )。

A.UI标签B.Ajax标签

C.jQuery标签D.非UI标签

(2)下列不属于流程掌握标签的是( )。

A.treeB.iterator

C.ifD.subset

(3)下列不属于数据访问标签的是( )。

A.actionB.date

C.beanD.reset

(4)下列不属于表单标签的是( )。

A.radioB.select

C.propertyD.textarea

(5)下列不能在页面显示后台自定义信息的是( )。

A.fielderrorB.file

C.actionmessageD.actionerror

3.思考题

(1) 请简述Struts2标签库的分类。

(2) 请简述Struts2标签库如何导入。

(3) 请简述流程掌握标签有哪些。

(4) 请简述数据访问标签有哪些。

(5) 请简述表单标签有哪些。