struts2常用的标签介绍
2014-03-12 21:06
471 查看
一:Struts2框架的标签库可以分为以下三类:
1.用户界面标签(UI标签):主要用来生成HTML元素的标签。
(1)表单标签:主要用于生成HTML页面的FORM元素,以及普通表单元素的标签。
(2)非表单标签:主要用于生成页面上的tree,Tab页等。
2.非用户界面标签(非UI标签):主要用于数据访问,逻辑控制。
(1)数据访问标签:主要包含用于输出值栈(ValueStack)中的值,完成国际化等功能的标签。
(2)流程控制标签:主要包含用于实现分支,循环等流程控制的标签。
3.AJAX标签:用于支持Ajax效果
二:Struts2标签的使用
1.在struts2-core-2.3.16.jar压缩文件的META-INF目录下找到Struts-tags.tld文件,这个文件里定义了Struts2的标签。如图:
2.要在jsp中使用Struts2的标签,先要指明标签的引入。通过jsp的代码的顶部加入以下的代码:
<
%@taglib prefix="s" uri="/Struts-tags" %>
具体使用案例观看我写的“在线考试系统”博客
三:Struts2标签语法
Struts2标签的属性按照下列的三个规则进行计算。
(1)所有的字符串属性类型都会解析“%{…}”这样的语法。
(2)所有的非字符属性类型都不会被解析,而是直接被看作一个OGNL表达式进行求值
(3)对于第二个规则的例外情况是,如果非字符串属性使用了“%{…}”语法,那么%{…}将被忽略,花括号中的内容将作为表达式计算。
四:Struts2通用标签
Struts2中通用标签可以分为二类:控制标签和数据标签。
我在此先写一个User类
创建MessageAction类
配置struts.xml文件
配置web文件
创建页面index.jsp
数据标签
1.property标签:
标签用于输出值栈中的对象的属性(property)值,使用value属性来指定要输出的对象属性,如果没有指定value属性,那么默认输出栈顶对象
property标签属性
输出结果:
输出结果看
第一种和第三种方法取出MessageAction.java类中的赋给message的hello值(即栈值),
第三种方法取的是message的name值,
但是如果第四种方法不给出缺省的值。不会输出任何的值
set标签的使用
Set标签将一个值赋给指定范围内变量。Set标签在某些情况下是比较有用的,例如在页面中多次引用一个复杂的表达式,我们可以将这个表达式赋给一个变量,然后直接引用变量。带来的好处就是:
1.提升了性能(表达式的计算只有一次)
2.提高了代码的可读性。
输出结果:
bean标签和param标签
¨bean标签用于实例化一个JavaBean对象(必须遵照JavaBean规范),bean标签的标签体内可以包含多个param标签,用于设置Bean的属性(必须有相应的setter方法)。如果指定了id属性(Struts2.2.1.1已经不建议使用,使用var属性替代),则创建的Bean实例将被放入到OgnlContext中。
注意:
id属性是可选的,无论是否指定id属性,bean标签创建的JavaBean实例都会被压入到值栈的顶部,在bean标签内部可以直接访问创建的对象,无须使用”#”标记,当bean标签结束的时候,bean标签创建的实例将从值栈中删除。
如果指定了id属性,那么bean标签创建的JavaBean实例还将被放到OgnlContext中,这样在bean标签的外部,也可以访问创建的对象了,不过此时就要使用”#”标记了。
param标签被用作其他标签的子标签,用于为其他标签提供参数
输出结果:
include标签
include标签类似于JSP的<jsp:include>标签,用于包含一个Servlet或JSP页面。include标签的标签体内可以包含多个param标签,用于向被包含的页面传递请求参数
控制标签
用于在呈现结果页面时控制程序的执行流程,根据程序执行的状态输出不同的结果
控制标签包括下列标签:
1.if:用于控制选择输出。
2.elseif:同if标签结合使用,用来控制选择输出。
3.else:同if标签结合使用,用来控制选择输出。
4.append:用来将多个集合拼接为一个新的集合。
5.generator:为一个字符串解析器,用来将一个字符串解析为一个集合。
6.iterator:迭代器,用来迭代输出集合数据。
7.merge:用来将多个集合拼接为一个新的集合,同append有所区别。
8.sort:用来对集合排序。
9.subset:用来截取集合的部分集合,开成新的集合子集合。
if/elseif标签属性test:为必填属性,是一个Boolean类型值,决定是否显示if标签内容。该标签标准格式如下:
<s:if test=“表达式”>
……..
</s:if>
<s:elseif test=“表达式”>
……..
</s:elseif>
<s:else>
………..
</s:else>
案例:
iterator(迭代标签)
用于遍历集合(java.util.Collection)List,Map,数组或枚举值(java.util.iterator)
案例:
1.用户界面标签(UI标签):主要用来生成HTML元素的标签。
(1)表单标签:主要用于生成HTML页面的FORM元素,以及普通表单元素的标签。
(2)非表单标签:主要用于生成页面上的tree,Tab页等。
2.非用户界面标签(非UI标签):主要用于数据访问,逻辑控制。
(1)数据访问标签:主要包含用于输出值栈(ValueStack)中的值,完成国际化等功能的标签。
(2)流程控制标签:主要包含用于实现分支,循环等流程控制的标签。
3.AJAX标签:用于支持Ajax效果
二:Struts2标签的使用
1.在struts2-core-2.3.16.jar压缩文件的META-INF目录下找到Struts-tags.tld文件,这个文件里定义了Struts2的标签。如图:
2.要在jsp中使用Struts2的标签,先要指明标签的引入。通过jsp的代码的顶部加入以下的代码:
<
%@taglib prefix="s" uri="/Struts-tags" %>
具体使用案例观看我写的“在线考试系统”博客
三:Struts2标签语法
Struts2标签的属性按照下列的三个规则进行计算。
(1)所有的字符串属性类型都会解析“%{…}”这样的语法。
(2)所有的非字符属性类型都不会被解析,而是直接被看作一个OGNL表达式进行求值
(3)对于第二个规则的例外情况是,如果非字符串属性使用了“%{…}”语法,那么%{…}将被忽略,花括号中的内容将作为表达式计算。
四:Struts2通用标签
Struts2中通用标签可以分为二类:控制标签和数据标签。
我在此先写一个User类
package model; public class User { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
创建MessageAction类
package action; import model.User; import com.opensymphony.xwork2.ActionSupport; public class MessageAction extends ActionSupport { private String message; private User user; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } @Override public String execute() throws Exception { user = new User(); user.setName("csdn"); user.setAge(22); message = "Hello!"; return SUCCESS; } public String login() { boolean b = true; if (user.getName() == null || user.getName().trim().equals("")) { addFieldError("name", "用户名不得为空"); b = false; } if (user.getAge() <= 0) { addFieldError("age", "年龄不合法"); b = false; } if (b) { return SUCCESS; } return INPUT; } }
配置struts.xml文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <package name="User" namespace="/user" extends="struts-default"> <action name="message" class="action.MessageAction" > <result name="success"> /index.jsp </result> </action> <action name="login" class="action.MessageAction" method="login" > <result name="success"> /index.jsp </result> <result name="input"> /lodin.jsp </result> </action> </package> </struts>
配置web文件
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>message</display-name> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
创建页面index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> </head> <body> </body> </html>
数据标签
1.property标签:
标签用于输出值栈中的对象的属性(property)值,使用value属性来指定要输出的对象属性,如果没有指定value属性,那么默认输出栈顶对象
property标签属性
1<s:property value="message" /> <br /> 2<s:property value="'message'" /> <br /> 3<s:property value="%{message}" /> <br /> 4<s:property value="%{csdn}" default="csdn"/> <br />
输出结果:
输出结果看
第一种和第三种方法取出MessageAction.java类中的赋给message的hello值(即栈值),
第三种方法取的是message的name值,
但是如果第四种方法不给出缺省的值。不会输出任何的值
set标签的使用
Set标签将一个值赋给指定范围内变量。Set标签在某些情况下是比较有用的,例如在页面中多次引用一个复杂的表达式,我们可以将这个表达式赋给一个变量,然后直接引用变量。带来的好处就是:
1.提升了性能(表达式的计算只有一次)
2.提高了代码的可读性。
<s:set name="xxx" value="user.name" /> 1<s:property value="#session.xxx" /><br/> 2<s:property value="#request.xxx" /><br/> 3<s:property value="xxx" /><br/> 4<s:property value="#xxx" /> </s:set>
输出结果:
bean标签和param标签
¨bean标签用于实例化一个JavaBean对象(必须遵照JavaBean规范),bean标签的标签体内可以包含多个param标签,用于设置Bean的属性(必须有相应的setter方法)。如果指定了id属性(Struts2.2.1.1已经不建议使用,使用var属性替代),则创建的Bean实例将被放入到OgnlContext中。
注意:
id属性是可选的,无论是否指定id属性,bean标签创建的JavaBean实例都会被压入到值栈的顶部,在bean标签内部可以直接访问创建的对象,无须使用”#”标记,当bean标签结束的时候,bean标签创建的实例将从值栈中删除。
如果指定了id属性,那么bean标签创建的JavaBean实例还将被放到OgnlContext中,这样在bean标签的外部,也可以访问创建的对象了,不过此时就要使用”#”标记了。
param标签被用作其他标签的子标签,用于为其他标签提供参数
<s:bean name="model.User"> <s:param name="name" value="'csdn'"/> <s:param name="age" value="'22'"/> <s:property value="name"/> <s:property value="age"/></s:bean>
输出结果:
include标签
include标签类似于JSP的<jsp:include>标签,用于包含一个Servlet或JSP页面。include标签的标签体内可以包含多个param标签,用于向被包含的页面传递请求参数
<s:include value="include.jsp"> <s:param name="name" value="csdn"/> <s:param name="age" value="22"/> </s:include>
控制标签
用于在呈现结果页面时控制程序的执行流程,根据程序执行的状态输出不同的结果
控制标签包括下列标签:
1.if:用于控制选择输出。
2.elseif:同if标签结合使用,用来控制选择输出。
3.else:同if标签结合使用,用来控制选择输出。
4.append:用来将多个集合拼接为一个新的集合。
5.generator:为一个字符串解析器,用来将一个字符串解析为一个集合。
6.iterator:迭代器,用来迭代输出集合数据。
7.merge:用来将多个集合拼接为一个新的集合,同append有所区别。
8.sort:用来对集合排序。
9.subset:用来截取集合的部分集合,开成新的集合子集合。
if/elseif标签属性test:为必填属性,是一个Boolean类型值,决定是否显示if标签内容。该标签标准格式如下:
<s:if test=“表达式”>
……..
</s:if>
<s:elseif test=“表达式”>
……..
</s:elseif>
<s:else>
………..
</s:else>
案例:
<s:set name="age" value="'61'"/> <s:if test="#age>60"> 老人 </s:if> <s:elseif test="#age>40"> 中年人 </s:elseif> <s:elseif test="#age>20"> 青年人 </s:elseif> <s:else> 少年 </s:else>
iterator(迭代标签)
用于遍历集合(java.util.Collection)List,Map,数组或枚举值(java.util.iterator)
案例:
<s:iterator value="{'java','jsp','hibernate','struts2','html'}" id="skill" status="status"> <s:property value="#status.odd"/><br/> <s:if test="#status.odd"> <s:property value="skill"/><br/> </s:if> <!--下标 --> <s:property value="#status.index"/> <!-- 页面显示序号 --> <s:property value="#status.count"/> </s:iterator>