`
- 浏览:
13166 次
- 性别:
- 来自:
北京
-
-
Struts2 标签库概述
- 用户界面标签 (UI 标签 ) :主要用来生成 HTML 元素的标签。
- 表单标签:主要用于生成 HTML 页面的 FORM 元素,以及普通表单元素的标签。
- 非表单标签:主要用于生成页面上的 tree , Tab 页等。
- 非用户界面标签 ( 非 UI 标签 ) :主要用于数据访问,逻辑控制。
- 数据访问标签:主要包含用于输出值栈 (ValueStack) 中的值,完成国际化等功能的标签。
- 流程控制标签:主要包含用于实现分支,循环等流程控制的标签。
-
Struts2 标签库
- 在早期的 WEB 开发中, JSP 视图控制和显示技术主要依靠 Java 脚本来实现,这样一来, JSP 页面重新嵌入了大量的 Java 脚本代码,给开发带来了极大的不方便。
- 从 JSP1.1 规范后, JSP 增加了自定义标签库的支持。标签库是一种组件技术,通过标签库,可以将复杂的 Java 脚本代码封装在组件中,开发者只需要使用简单的代码就可以实现复杂的 Java 脚本功能。提供了 Java 脚本的复用性,提高了开发者的开发效率。
- Struts2 标签库相对 struts1.x 进行了巨大的改进,支持 OGNL 表达式,不再依赖任何表现层技术。
-
Struts2 标签的使用
- 我们可以在 struts2-core-2.0.11.jar 压缩文件的 META-INF 目录下找到 struts-tags.tld 文件,这个文件里定义了 Struts2 的标签。
- 要在 jsp 中使用 Struts2 的标志,先要指明标志的引入。通过 jsp 的代码的顶部加入以下的代码:
- <%@taglib prefix="s" uri="/struts-tags" %>
-
Struts2 标签语法 ( 一 )
- Struts2 的标签都支持动态数据的访问,标签的属性都可以使用 OGNL 表达式, struts2 标签的属性具有类型,这些类型可以简单地分为字符串类型和非字符串类型,对于字符串类型的属性,如果要访问动态数据,需要使用 %{… } 这样的语法,
- 例如: <s:include value=“%{ url }” />
- Include 标签的 value 属性是字符串类型, Struts2 将对这个属性进行解析,查找符合 %{…} 样式的字符串,然后将花括号之间的内容作为 OGNL 表达式进行求值。如果属性中没有 %{…} 样式的字符串,那么属性的值将被直接看成是字符串数据。
- 例如: <s:include value=“urlTag.action” />
- 对于非字符串类型的属性值,将直接作为 OGNL 表达式进行求值。
- 例如: <s:property value=“username”/>
- property 标签的 value 属性是 Object 类型,它的值 username 将作为 OGNL 表达式进行求值,结果是值栈中位于栈顶的对象的 username 属性的值。如果要为非字符串类型的属性直接指定字符串数据,那么需要使用 OGNL 中的字符串常量,即用单引号(‘)或双引号(“)将字符串括起来。
- 例如: <s:property value=“’zhangsan‘”/>
- value 属性的值‘ zhangsan’ 作为字符串常量,计算结果就是 zhangsan ,因此输出 zhangsan 。
-
Struts2 标签语法 ( 二 )
- 除上述用法之外,也可以使用 %{…} 这样的语法来指定字符串常量。
- 例如: <s:property value=“%{ ‘zhangsan’ }”/>
- 在这种情况下, %{ } 将被忽略,花括号中的内容将作为表达式被计算。
- 总结一下, struts2 标签的属性按照下列的三个规则进行计算。
- (1) 所有的字符串属性类型都会解析“ %{…}” 这样的语法。
- (2) 所有的非字符属性类型都不会被解析,而是直接被看作一个 OGNL 表达式进行求值
- (3) 对于第二个规则的例外情况是,如果非字符串属性使用了“ %{…}” 语法,那么 %{…} 将被忽略,花括号中的内容将作为表达式计算。
- 如果大家在使用标签时, 忘记了某个属性是字符串类型,还是非字符串类型,那么有一个简单的方法,那就是不考虑它是什么类型,统一使用“ %{…}” 语法。
-
Struts2 通用标签
- Struts2 中通用标签可以分为二类:控制标签和数据标签 。控制标签用于呈现页面时控制执行流程,数据标签用于访问值栈中的数据。
- 数据标签: 用于访问 ActionContext 和值栈中的数据。数据标签包括:
- property set push param bean action include
- url a i18n text date debug
- 控制标签: 用于在呈现结果页面时控制程序的执行流程,根据程序执行的状态输出不同的结果,控制标签包括下列标签:
- if/elseif/else iterator append merge
-
数据标签 -----property 标签
- property 标签用于输出值栈中的对象的属性 (property) 值,使用 value 属性来指定要输出的对象属性,如果没有指定 value 属性,那么默认输出栈顶对象。
- 在前面的章节中,我们已经使用过了 property 标签,我们再看一个例子:
- <s:property value=“username” default=“ 游客” />
- 取出栈顶对象 ( 通常是 action) 的 username 属性并输出,如果没有找到 username 属性,那么输出”游客”。
-
数据标签 -----set 标签
- Set 标签将一个值赋给指定范围内变量。 Set 标签在某些情况下是比较有用的,例如在页面中多次引用一个复杂的表达式,我们可以将这个表达式赋给一个变量,然后直接引用变量。带来的好处就是:
- Set 标签以 name 属性的值作为键 (key) ,将 value 属性的值保存到指定的范围对象中。属性 scope 取值中的 page,request,session,application 同 JSP 的 4 种范围,如果指定了 action 范围 ( 默认值 ) , value 属性的值将被同时保存到 request 范围和 OgnlContext 中。
- 示例:访问地址: http://localhost:8080/.../setTag.action
-
数据标签 -----push 标签
- push 标签用于把一个值压入值栈 ( 位于栈顶 ) ,注意和 set 标签的区别, set 标签是将值放到 action 上下文中。当 push 标签结束后, push 标签放入值栈中的对象将被删除,换句话说,要访问 push 标签压入栈中的对象,需要在标签内部去访问。
public class User { private String username; private String email; private String sex; 省略 set/get 方法 }
- Push 标签示例 访问: http://localhost:8080/...../pushTag.action
-
数据标签 -----param 标签
- param 标签被用作其他标签的子标签,用于为其他标签提供参数,例如:为 bean 标签和 include 标签提供参数。
- 当使用 param 标签时, 参数的值可以通过 value 属性给出,也可以在标签体中给出 ( 开始标签和结束标签之间的文本 ) 。这二种用法有一些区别。我们看下面的例子:
- <param name=“color”>blue</param> <!-- (1) -->
- <param name=“color” value=“blue” /> <!-- (2) -->
- 在第 (1) 种情形中,参数值将作为 java.lang.String 对象 ( 即字符串 ) 被放入栈中;
- 在第 (2) 种情形中,参数值将作为表达式进行计算,如果 blue 不存在,则 color 参数的值为 null 。
- 在第 (1) 种情形中,要为 color 指定字符串值,可以写为:
- <param name=“color” value=“ ‘ blue ‘ ”/> 或者 <param name=“color” value=“%{‘ blue ‘ }“/>
-
数据标签 -----bean 标签
- bean 标签用于实例化一个 JavaBean 对象 ( 必须遵照 JavaBean 规范 ) , bean 标签的标签体内可以包含多个 param 标签,用于设置 Bean 的属性 ( 必须有相应的 setter 方法 ) 。如果指定了 id 属性,则创建的 Bean 实例将被放入到 OgnlContext 中。
- id 属性是可选的,无论是否指定 id 属性, bean 标签创建的 JavaBean 实例都会被压入到值栈的顶部,在 bean 标签内部可以直接访问创建的对象,无须使用” #” 标记,当 bean 标签结束的时候, bean 标签创建的实例将从值栈中删除。
- 如果指定了 id 属性,那么 bean 标签创建的 JavaBean 实例还将被放到 OgnlContext 中,这样在 bean 标签的外部,也可以访问创建的对象了,不过此时就要使用” #” 标记了。
- bean 标签示例
-
bean 标签示例说明
- 在没有指定 id 属性的情况下,创建的 User 对象只被压入值栈,在 bean 标签的内部使用 property 标签可以直接访问 User 对象的属性。在 bean 标签外部,由于值栈中的 User 对象已被删除,所以无法访问到 User 对象的属性了。
- 在指定了 id 属性的情况下,创建的 User 对象除了被放到值栈中外,还被放到 action 上下文中,因此在标签的内部和外部都可以访问 User 对象属性,只不过在标签外部访问时需要添加 #user 前缀 ,
- 访问路径: http://localhost:8080/..../beanTag.action
-
- 通过指定 action 的名字和可选的名称空间, action 标签允许你在 JSP 中直接调用 action 。如果将标签的 excuteResult 属性设为 true, 那么 action 对应的结果输出也将被包含到本页面中。
- 在 action 标签的标签体中可以嵌套 param 标签,向 action 传递参数。
数据标签 -----action 标签
- 如果指定了 id 属性,则 action 将被放到 OgnlContext 中,在 action 标签结束后,可以通过 #id 来引用 action.
- ActionTagAction.java actionTagSuccess.jsp
- actionTag.jsp
-
示例说明
- 在第一个 action 标签调用中,执行了结果,但没有设置 ActiontagAction 的 username 和 email 属性,所以结果页面中的这两项输出为空。
- 在第二个 action 标签调用中,不执行结果,调用 ActionTagAction 的 doDefault() 方法,在这个方法中,我们在请求对象中设置了 greeting 属性,在页面中使用 property 标签,通过表达式 #attr.greeting 来获取 greeting 属性。
- 在第三个 action 标签调用中,执行了结果,并通过 param 标签设置了 ActionTagAction 的 username 和 email 属性,在结果页面中通过 property 标签输出这两个属性的值。
- 访问路径: http://localhost:8080/....actionTag.jsp
-
数据标签 -----include 标签
- include 标签类似于 JSP 的 <jsp:include> 标签,用于包含一个 Servlet 或 JSP 页面。 include 标签的标签体内可以包含多个 param 标签,用于向被包含的页面传递请求参数
-
include 标签示例说明
- 在 jsp2.jsp 中,我们使用 JSP 的 EL 表达式来获取传的请求参数。注意:在 include 标签内部使用 param 标签向被包含的页面传递的请求参数, 不能使用如下的 property 标签来访问: <s:property value=“#parameters.username” />
- #parameters 引用的实质是一个 Map 对象,并不等同于 HttpServletRequest 对象。
- 在包含页面时,如果页面中有中文,将会出现乱码,要解决这个问题,可以在 struts.xml 文件中配置 struts.i18n.encoding 属性,如下:
- <constant name=“struts.i18n.encoding” value=“gbk” />
- 访问路径: http://localhost:8080/.../includeTag.jsp
-
数据标签 -----i18n 和 text 标签
- i18n 和 text 标签用于对国际化提供支持 .i18n 标签用于将一个资源包放入值栈, text 标签用于从资源包中获取消息。例如
- <s:i18n name=“ApplicationResources”>
- i18n 标签将基名为 ApplicationResources 的资源包放入到值栈中, text 标签从资源包中获取键为 title 的文本消息。
- 注意: i18n 标签放入值栈的资源包只能在 i18n 标签的标签体内访问,一旦 i18n 标签结束,值栈中的资源包将被删除。
- text 标签也可以单独使用,在这种情况下,它将首先查找资源包的基名与调用的 Action 类名相同的资源包。这意味着你可以在 Action 类所在的包中创建与 Action 类名相同的资源文件,例如:在 com.ibm.action 包中有一个名为 LoginAction 的类, 你可以在 com.ibm.action 包括中创建名为 LoginAction.properties 、 LoginAction_zh.properties 、 LoginAction_en.properties 等资源文件 ( 名字中的 LoginAction 部分称为基名 ) ,当执行完 LoginAction 后,在转向的结果页面中使用单独的 text 标签获取本地化的文本消息,那么 text 标签将从 com.ibm.action.LoginAction_xx.properties( 根据当前的语言环境选择某个资源文件 ) 中读取 name 属性值对应的文本消息。
-
数据标签 -----i18n 和 text 标签
- 如果找不到与 Action 类名相同的资源包,那么就从默认资源包中获取消息;如果默认资源包不存在,或者默认资源包中也没有找到对应的消息,那么 text 标签的标签体内容将作为默认消息被输出;如果没有标签体,那么 name 属性的值将直接被输出。
- text 标签内部还可以使用嵌套的 param 标签,来指定消息文本中的参数, param 标签的顺序对应了消息文本中参数的索引顺序。
-
i18n 和 text 标签示例
- 在项目的 src 下新建包: com.ibm.action, 在这个包中新建 TextTagAction 类,继承自 ActionSupport 类,注意:你的 Action 类一定要继承 ActionSupport 类,因为 ActionSupport 类对国际化提供了支持,这样 text 标签才能访问到资源包的基名与你的 Action 类名相同的资源包。
- TextAction 类没有任何代码,这主要是因为 ActionSupport 基类已经实现了 execute() 方法,该方法返回 Action.SUCCESS, 这就足够了,我们编写 TextAction 类的目的是为了通过这个 Action 来访问使用了 text 标签的结果页面。
-
i18n 和 text 标签示例
- 在 com.ibm.action 包中新建 TextTagAction.properties, 内容如下:
- now=Now is {0} . {1} , welcome you.
- 键为 now 的消息有两个参数,分别用 {0} 和 {1} 来表示。
- 新建 ApplicationResources.properties, 内容如下:
-
i18n 和 text 标签示例
-
数据标签 -----date 标签
- date 标签用于格式化输出日期值,也可用于输出当前日期值与指定日期值之间的时差
- 1 、 format 属性用于指定日期的格式化样式,具体的样式规则可以参看 java.text.SimpleDateFormat 类的 API 文档。
- 2 、将 nice 属性设为 true ,可以输出指定日期值和当前日期值之间的时差,此时 format 属性失效,也就是说,当 nice 属性为 true 时,即使你指定了 format 属性,它也不会起作用
- 3 、如果没有使用 nice 属性,也没有指定 format 属性,那么 date 标签将会在国际化资源包中查找 struts.date.format 键,并以这个键的值作为日期的格式化样式;如果这个键不存在,那么默认将会使用 DateFormat.MEDIUM 格式化样式。
- 4 、如果找不到 name 属性指定的 Date 对象,那么将返回空。
-
date 标签示例
- 在 ApplicationResources.properties 文件中添加 struts.date.format 键
- struts.date.format=yyyy/MM/dd hh:mm:ss
- 可以使用 struts2 的 struts.custom.i18n.resources 属性来设置默认的资源包,编辑 struts.xml 文件,使用 constant 元素来配置 struts.custom.i18n.resources 属性,内容如下
- <constant name=“struts.custom.i18n.resources” value=“ApplicationResources”/>
-
测试: http://localhost:8080/...../dateTag.jsp
-
控制标签
- 控制标签用于完成流程控制,例如分支,循环等操作。控制标签包含下面几个:
- elseif: 同 if 标签结合使用,用来控制选择输出。
- else: 同 if 标签结合使用,用来控制选择输出。
- append: 用来将多个集合拼接为一个新的集合。
- generator: 为一个字符串解析器,用来将一个字符串解析为一个集合。
- iterator: 迭代器,用来迭代输出集合数据。
- merge: 用来将多个集合拼接为一个新的集合 , 同 append 有所区别。
- subset :用来截取集合的部分集合,开成新的集合子集合。
-
控制标签 -----if/elseif/else 标签
- if/elseif 标签属性 test: 为必填属性,是一个 Boolean 类型值,决定是否显示 if 标签内容。该标签标准格式如下:
-
控制标签 ----- if/elseif/else 标签举例
- <%@ taglib prefix="s" uri="/struts-tags"%>
- <!-- 定义一个 testname 属性 -->
- <s:set name="testname" value="%{'Java'}" />
- <s:if test="%{#testname=='Java'}">
- <s:property value="%{# testname}" />
- <s:elseif test="%{#testname=='Jav'}">
- <s:property value="%{# testname}" />
-
控制标签 ----- if/elseif/else 标签举例
- <%@ taglib prefix="s" uri="/struts-tags"%>
- <s:set name="age" value="61"/>
- <s:if test="${age > 60}">
- <s:elseif test="${age > 35}">
- <s:elseif test="${age > 15}" id="wawa">
-
控制标签 ----- if/elseif/else 标签举例
- <%@ taglib prefix="s" uri="/struts-tags"%>
- <s:set name="name" value="<%="'"+ request.getParameter("name")+"'" %>"/>
- System.out.println(request.getParameter("name"));
- <s:if test="#name=='zhaosoft'">
- <s:elseif test="#name=='zxl'">
-
控制标签 ----- iterator (迭代标签)
- 描述:用于遍历集合( java.util.Collection ) List,Map, 数组或枚举值 (java.util.iterator) 。该标签的属性如下表:
-
IteratorStauts 实例包含方法
- int getCount(): 返回当前迭代过元素的总数。
- int getIndex(): 返回当前迭代元素的索引。
- boolean isEven(): 判断当前迭元素是否为偶数。
- boolean isOdd(): 判断当前迭元素是否为奇数。
- boolean isFirst(): 判断当前迭元素是否为第一个元素。
- boolean isLast(): 判断当前迭元素是否为最后一个元素
- IteratorStauts 的这些方法分别对应了 count,index,even,odd,first,last 属性
- 控制标签 ----- iterator 标签示例
-
控制标签 ----- iterator (迭代标签)举例
- <s:iterator value ="{' 第一个元素 ',' 第二个元素 '}" >
- <p>day is: <s:property/></p>
- public String execute() throws Exception {
- myList = new ArrayList();
- myList.add(" 第一个元素 ");
- myList.add(" 第二个元素 ");
- myList.add(" 第三个元素 ");
- myMap.put("key1", " 第一个元素 ");
- myMap.put("key2", " 第二个元素 ");
- myMap.put("key3", " 第三个元素 ");
-
- <s:iterator value="{' 第一个元素 ',' 第二个元素 '}" status="st">
- <td><s:property value="#st.getIndex()" /></td>
- <s:iterator value="myList" status="st">
- <td><s:property value="#st.getIndex()" /></td>
-
- <s:iterator value="#{'key1':' 第一个元素 ','key2':' 第二个元素 '}" status="st">
- <td><s:property value="#st.getIndex()" /></td>
- <s:iterator value="myMap" status="st">
- <td><s:property value="#st.getIndex()" /></td>
-
控制标签 ----- append 标签
- append: 用来将多个集合拼接为一个新的集合。这样拼接的目的就是可以将多个集合使用一个 <iterator /> 标签完成迭代。标签属性 id: 指定了集合元素的 ID 。
- private List myList1, myList2;
- private Map myMap1, myMap2;
- public String execute() throws Exception {
- myList1 = new ArrayList();
- myList2 = new ArrayList();
- myList1.add(" 第一个集合 # 第一个元素 ");
- myList1.add(" 第一个集合 # 第二个元素 ");
- myList1.add(" 第一个集合 # 第三个元素 ");
- myList2.add(" 第二个集合 # 第一个元素 ");
- myList2.add(" 第二个集合 # 第二个元素 ");
- myList2.add(" 第二个集合 # 第三个元素 ");
- myMap1 = new HashMap(); myMap2 = new HashMap();
- myMap1.put("key1", " 第一个集合 # 第一个元素 ");
- myMap1.put("key2", " 第一个集合 # 第二个元素 ");
- myMap1.put("key3", " 第一个集合 # 第三个元素 ");
- myMap2.put("key1", " 第二个集合 # 第一个元素 ");
- myMap2.put("key2", " 第二个集合 # 第二个元素 ");
- myMap2.put("key3", " 第二个集合 # 第三个元素 ");
-
- <h1><span style="background-color: #FFFFcc">Append 标签示例 </span></h1>
- <s:append id="newList">
- <s:param value="myList1" />
- <s:param value="myList2" />
- <s:iterator value="#newList" id="name" status="st">
- <td><s:property value="#st.getIndex()" /></td>
- <s:append id="newMap">
- <s:param value="myMap1" />
- <s:param value="myMap2" />
- <s:iterator value="#newMap" status="st">
- <td><s:property value="#st.getIndex()" /></td>
-
控制标签 ----- generator 标签
- generator 标签用来将指定的字符串按规定的分隔符分解为多个子字符串,生成的多个子字符串可以使用 iterator 标签输出。
- count :可选属性,为一个 Integer 类型值,指定生成集合中元素的总数。
- separator: 必填属性,为一个 String 类型值,指定用来分解字符串的分隔符。
- val :必填属性,为一个 String 类型值,指定被分解的字符串。
- converter :可选属性,为一个 Converter 类型实例,指定一个转换器,该转换器负责将集合中的每个字符串转换为对象。
-
控制标签 ----- generator 标签举例
- public void setMsg(String msg) {
- public String execute() throws Exception {
- setMsg(" 第一个元素 ; 第二个元素 ; 第三个元素 ");
-
控制标签 ----- generator 标签举例
- <span style="background-color: #FFFFCC">Generator 标签示例 </span>
- <s:generator separator=";" val="msg" id="temp" count="2"></s:generator>
- <s:iterator status="st" value="#attr.temp">
- <td><s:property value="#st.getIndex()" /></td>
- 注意:如果在 generator 标签中指定了 count 属性,则该集合中最多只能有 count 个元素,多余的元素将会被忽略。
-
控制标签 ----- append 标签
- append: 用来将多个集合拼接为一个新的集合。
-
控制标签 ----- merge 标签
- Merge 标签用于合并迭代器,其用法与 append 相似,区别就是对合并后的迭代器中的元素迭代的顺序不一样。
-
控制标签 ----- subset 标签
- Subset 标签用于截取一个迭代器的子集,其内部实现是通过 org.apache.struts2.util.SubsetIteratorFilter 类来完成的。
- Subset 标签示例
-
subset 标签示例
- 除了上面的用法之外,还可以使用 subset 属性指定一个 Decider ,用于过滤某些元素。要编写一个 Decider 类,需要实现 org.apache.struts2.util.SubsetIteratorFilter.Decider 接口,该接口只有一个方法, public boolean decide(Object element) throw Exception, 如果该方法返回 true ,表明参数 element 表示的元素应该被包含到子集中。
- 我们编写一个 Decider 类,选取集合中含有“ java” 子串的元素,代码如下:
首先使用 bean 标签实例化 MyDecider 对象,并将这个对象放入到 OgnlContext 中。在 subset 标签的 decider 属性中,通过 OGNL 表达式 #myDecider 来引用 MyDecider 对象。
-
控制标签 ----- sort 标签
- Sort 标签根据 comparator 属性指定的比较器对集合进行排序,并将排序后的迭代器压入值栈的栈顶。在 sort 标签的内部,你可以使用 iterator 标签取出栈顶的迭代器对排序后的元素进行迭代。当 sort 标签结束时,栈顶的迭代器将被删除。
- sort 标签示例
-
表单标签
- Struts2 的表单标签可以分为两类, form 标签本身和包装 HTML 表单元素的其他标签。 form 标签本身的行为不同于它内部的元素。
- form textfield password radio checkbox checkboxlist select
- doubleselect combobox optiontransferselect optgroup updownselect
- textarea hidden file label reset submit token head
- 表单标签
-
表单标签的 name 和 value 属性
- 很多表单标签( form 标签除外)的 name 属性和 value 属性之间存在一个独特的关系。 name 属性除了为 HTML 表单元素指定名字,在表单提交时作为请求参数的名字外,同时它还映射到 Action 的属性。
- 在大多数情况下, name 属性映射到一个简单的 JavaBean 属性,例如 name 属性的值为” postalCode”, 在表单提交后, struts2 框架将会调用 Action 的 setPostalCode() 方法来设置属性。
- 有的时候你希望在表单元素中显示 Action 属性的数据,这时就轮到 value 属性登场了,为 value 属性指定表达式” %{postalCode}”, 这将会调用 Action 的 getPostalCode() 方法,并在表单中显示返回的数据,之后, 用户可以编辑这个值,然后重新提交它。
-
form 标签
- form 标签输出一个 HTML 输入表单,此外, xhtml 主题的 form 标签还输出表单元素外围的表格。
-
- 1) 通常情况下,当前输出表单的请求和提交表单的请求属于同一个命名空间。例如:请求 /admin/updateCategory!default.action 输出的表单,命名空间会被假设为 /admin ,因此在使用 form 标签时,可以不使用 namespace 属性。如下:
- <s:form action=“updateCategory” >
- 如果输出表单的请求和提交表单的请求分属于不同的名称空间,那么可以通过
- namespace 属性指定处理表单提交的 action 所属的名称空间。
- 2) 若通过 action 的一个非 execute 方法输出表单,然后将表单提交给 action 默认的 execute 方法执行,那么 form 标签的 action 属性可以忽略。例如:对于下面的表单:
- <s:textfield name=“username” label=“ 用户名” />
- 当访问 /register!default.action 时, 输出上表单, form 标签会自动将 action 属性设为
- register ,这样在表单提交后就会执行 action 的 execute 方法。
- 3)method 和 enctype 是 HTML form 标签的属性。
- 4) 当使用验证框架时,将 form 标签的 validate 属性设为 true ,将自动生成客户端的 JavaScript 验证代码。
- <s:form action=“register” method=“post” />
- struts2 默认的主题是 xhtml, 上述代码在客户端浏览器中的输出如下:
- <s:form id=“register” onsubmit=“return true” action=“register” method=“post”>
- <table class=“wwFormTable”></table>
- 可以看到 form 标签内部输出了一个 table 元素。
-
textfield 标签
- textfield 标签输出一个 HTML 单行文本输入控件,等价于 HTML 代码: <input type=“text” …/>
- <s:form action=“register” method=“post”>
- <s:textfield name=“username” label=“ 用户名” />
-
password 标签
- password 标签输出一个 HTML 口令输入控件,等价于 HTML 代码: <input type=“password” ../>
- 例子: <s:password name=“password” label=“ 密码” />
-
textarea 标签
- textarea 标签输出一个 HTML 多行文本输入控件,等价于 HTML 代码: <textarea …./>.
- <s:textarea name=“personal” cols=“30” rows=“5” label=“ 个人简历” />
-
select 标签
- select 标签输出一个 HTML 列表框,等价于 HTML 代码:
- <select …><option..></option></select>
-
select 标签示例
- <s:select label=“ 最高学历” name=“education” list=“{‘ 高中’,‘大学’,‘硕士’ }” />
- 在 select 标签的 list 属性中直接使用 OGNL 表达式创建了一个列表,列表中的每一项都将作为 HTML 列表框的一个选项。
- <s:select label=“ 最高学历” name=“education” list=“#{1:‘ 高中’, 2:‘ 大学’, 3:‘ 硕士’ }” />
- 在 select 标签的 list 属性中直接使用 OGNL 表达式创建了一个 Map 。在这里要注意的是, Map 的 key 是作为列表框选项的值,而 Map 中的 value 是作为列表框选项的内容。
-
select 标签示例
- <s:select label=“ 最高学历” name=“education” list=“{‘ 高中’,‘大学’,‘硕士’ }” headerKey=“-1” headerValue=“ 请选择你的学历” />
- Header 选项主要用来越提示作用,因此应该将 header 选项的值 ( 通过 headerKey 属性设置 ) 设为无意义的值,例如此处的 -1.
- <s:select label=“ 最高学历” name=“education” list=“{‘ 高中’,‘大学’,‘硕士’ }” headerKey=“-1” headerValue=“ 请选择你的学历” emptyOption=“true” multiple=“true” / >
- 使用 emptyOption 属性在 header 选项后添加一个空的选项。
- multiple 属性设为 false ,则只能从下拉列表中选择一个选项,如果设为 true ,则可以多选。
-
optgroup 标签
- optgroup 标签作为 select 标签的子标签使用,用于创建选项组。你可以在 select 标签的标签体中使用一个或者多个 optgroup 标签,对选项进行逻辑分组。注意, optgroup 标签本身不能嵌套。
- <%@ taglib prefix=“s” uri=“/struts-tags” %>
- <s:select label= " 选择图书 " name= "book" list="#{1:'JAVA 核心编程 ',2:' 深入 struts2 学习 '}" >
- <s:optgroup label= "C/C++ 图书 " list="#{3:'VC++ 编程详解 ',4:'Spring 详解 '}"/>
- <s:optgroup label= "Oracle 图书 " list="#{5:'Oracle 基础 ',6:'DBA 入门 '}"/>
-
optgroup 标签注意
- optgroup 标签的 label 属性指定选项组的组名。 optgroup 标签对应的模板需要使用 listKey 和 listValue 属性的值,因此你要么为 list 属性指定一个 Map 类型的值 ( 此时, listKey 默认为 Map.Entry 的 key , listValue 默认为 Map.Entry 的 value) ,要么为 list 属性指定一个对象列表,然后使用 listKey 和 listValue 属性指定对象的属性作为选项的值和内容。
-
radio 标签
- radio 标签输出一组 HTML 单选按钮,等价于一组 HTML 代码: <input type=“radio” …/>
- <%@ taglib prefix= "s" uri= "/struts-tags" %>
- <s:radio name= "user.sex" value= "1" list="#{1 : ' 男 ', 0 : ' 女 '}" label= " 性别 " />
-
checkbox 标签
- checkbox 标签输出一个 HTML 复选框,等价于代码: <input type=“checkbox”…/>
- checkbox 标签创建一个 value 属性为 true 或者为 false 的复选框。你可以通过 checkbox 标签的 fieldValue 属性来指定创建的 HTML 复选框 value 属性的值。我们看下面的代码:
- <s:checkbox name=“user.username” label=“ 是否显示 Email” fieldValue=“true” />
- 复选框的值是 true 还是 false ,是由 fieldValue 属性来控制的,而不是由通常的 value 属性来设置的。
- 注意,除非你知道你要做什么,否则不要将 fieldValue 属性设置为 false 。将 fieldValue 属性设置为 false 可能会导致一些问题。 HTML 规范规定,复选框只有在选中时才会被提交,在通常的 Servlet/JSP 处理过程中,我们可以通过判断复选框的 name 属性所指定的请求参数是否存在来获知用户是否选中了复选框,如果选中,则取出它的值。然而,在使用 struts2 框架时,这一切发生了一些微妙的变化。如果将 fieldValue 属性设置为 false ,那么复选框的值将是 false 。当没有选中复选框时,提交的请求参数中不会有复选框对应的请求参数。不过,虽然 struts2 框架没有接收到这个请求参数,但它仍然会将复选框对应的 action 属性的值设为 false 。于是你就会看到一个奇怪的现象,那就是不管你是否选中复选框,对应的 action 属性的值都是 false.
-
checkboxlist 标签
- checkboxlist 标签使用一个列表创建一系列复选框,属性设置与 <s:select/> 和 <s:radio/> 类似,只是创建的是 HTML 复选框。不同的是, checkboxlist 标签是多选标签。
- <s:checkboxlist name= "interest" list= "{' 足球 ',' 篮球 ',' 排球 ',' 游泳 '}" label= " 兴趣爱好 " />
-
hidden 标签
- hidden 标签输出一个 HTML 隐藏表单元素,等价于 HTML 代码: <input type=“hidden”…/>. 在 xhtml 主题下, hidden 标签与其它的标签不太一样, hidden 标签并不输出表行。 xhtml 主题直接从 simple 主题继承了 hidden.ftl 模板。除了公共属性外, hidden 标签没有特有的属性。
- <s:hidden name=“id” value=“5” />
-
submit 标签
- submit 标签输出一个提交按钮。 submit 标签和 form 标签一起使用可以提供异步表单提交功能。 submit 标签可以输出以下三种类型的提交按钮。
- input: 等价于 HTML 代码 <input type=“submit”…>
- image: 等价于 HTML 代码 <input type=“image”…>
- button: 等价于 HTML 代码 <input type=“submit”…>
- HTML 的 button 标签已经演进为可以分别指定提交的值 ( 通过 value 属性指定 ) 和按钮上显示的文本 ( 通过标签的内容来指定 ) ,但只能用于 IE6.0 以上版本的浏览器。
-
submit 标签示例
- 例 1 :指定 image 类型的提交按钮,使用 method 属性。
- <s:submit type=“image” method=“login” src=“images/login.gif” />
- <input type=“image” src=“images/login.gif” name=“method:login” value=“Submit”…./>
- 例 2 :指定 button 类型的提交按钮,使用 action 和 method 属性。
- <s:submit type=“button” action=“userManager” method=“login” label=“ 登录” />
- <button type=“submit” name=“action:userManager!login” value=“submit” …/> 登录 </button>
- 通过上面的例子可以看到 name 属性有二个前缀: method 和 action ,这是 struts2 提供的一种特性,即使用一些预定义的前缀来命名一个按钮,通过按钮的名字来改变执行的行为。 Struts2 定义了 4 个前缀,如下:
- method-------method:login
- action--------action:userManager
- redirect------redirect:cancel.jsp
- redirection-action------redirect-action:register
-
method 前缀
- 使用 method 前缀,来取代 action 默认的 execute() 方法的执行。例如一个表单同时用于用户注册和登录,那么可以编写代码如下:
- <s:form action=“userManager”>
- <s:textfield label=“ 用户名” name=“user.username” />
- <s:password label=“ 密码” name=“user.password” />
- <s:submit value=“ 登录” name=“method:login” />
- <s:submit value=“ 注册” name=“method:reg” />
- 注意: 1) 对于 input 类型的提交按钮,不能通过 submit 标签的 label 属性来设置提交按钮上的文本,只能使用 value 属性。
- 2) 可以在 submit 标签的 name 属性中直接使用 method 前缀,也可以像前面给出的例子中使用 submit 标签的 method 属性来指定处理请求的 action 方法。
-
action 前缀
- 使用 action 前缀,取代 form 标签指定的 action ,将请求导向到另外的 action 进行处理。
- <s:textfield label=“ 用户名” name=“user.username” />
- <s:password label=“ 密码” name=“user.password” />
- <s:submit value=“ 注册” name=“action:register” />
- 如果用户已经注册,可以直接登录,否则单击注册按钮,转到注册页面。 action 前缀也可以和 struts2 的动态方法调用结合使用,例如: name=“action:userManager!register”.
-
redirect 前缀
- 使用 redirect 前缀将请求重定向到其他的 URL ,甚至可以是 Web 应用程序外部的 URL 。
- <s:textfield label=“ 用户名” name=“user.username” />
- <s:password label=“ 密码” name=“user.password” />
- <s:submit value=“ 注册” name=“redirect:www.163.com” />
-
redirect-action 前缀
- 使用 redirect-action 前缀将请求重定向到其他的 action 。在内部, struts2 使用 ServletRedirectResult 来执行这个任务。
- <s:textfield label=“ 用户名” name=“user.username” />
- <s:password label=“ 密码” name=“user.password” />
- <s:submit value=“ 注册” name=“redirect-action : register” />
-
reset 标签
- reset 标签输出一个重置按钮。 reset 标签与 form 标签一起使用,用来提供表单的重置。 reset 标签可以输出以下两种类型的重置按钮:
- input: 等价于 HTML 代码 <input type=“reset”…>
- button: 等价于 HTML 代码 <button type=“reset”…>
- <s:reset type=“button” label=“ 重置” />
- 如果是类型为 input 的重置按钮,则只能通过 value 属性来设置重置按钮上的文本。
-
label 标签
- Xhtml 主题下的 label 标签输出两个 HTML 的 label 标签 (simple 主题下的 label 标签只输出一人 HTML label 标签 ) ,分别位于一行的两列,左边的 label 标签起提示作用,右列的 label 标签用于显示只读的 action 属性数据。
- <s:label label=“ 用户名” name=“user.username” />
- 如果 Action 实例已经创建,并且 user.username 有值,那么在表行的右列中将显示 user.username 的值。
-
token 标签与 file 标签
- token 标签输出两个隐藏的表单字段,用于防止表单的重复提交。要让 token 标签正常工作,需要启用 TokenInterceptor 或者 TokenSessionInterceptor 拦截器。
- 示例: <s:token /> 具体使用后面章节讲解。
- file 标签输出一个 HTML 文件选择框,等价于 HTML 代码: <input type=“file” …/>.
- <s:file name=“uploadFile” accept=“text / *” />
- <s:file name=“anotherUploadFile” accept=“text/html,text/plain” />
-
非表单标签
- component 、 a 、 actionerror 、 actionmessage 、 fielderror
- component 标签使用特定的模板输出一个自定义的 UI 小部件 (widget) 。
- a 标签创建一个 HTML 超链接,等价于 HTML 代码: <a href=“….” />.
- a 标签虽然可以在 simple 、 xhtml 和其它主题中使用,但它实际上是为了更好地和 ajax 主题一起工作布置而设计的 .
- a 标签有一个 String 类型的 href 属性,用于指定链接的 URL 。看下面的例子:
- <s:a href=“register!default.action”> 重新注册 </s:a>
-
actionerror 、 actionmessage 、 fielderror 标签
- actionerror 、 actionmessage 、 fielderror 标签都是用于输出消息的 .
- actionerror 标签输出 action 的错误消息,
- actionmessage 标签输出 action 的一般消息,
- fielderror 标签输出 action 字段的错误消息 .
- actionerror 标签输出 action 的 actionErrors 属性 (property) 保存的错误消息, actionErrors 是一个 Collection 类型的属性;
- actionmessage 标签输出 action 的 actionMessages 属性保存的消息, actionMessages 是一个 Collection 类型的属性;
- fielderror 标签输出 action 的 fieldErrors 属性保存的字段错误消息, actionMessages 是一个 Map 类型的属性;
- 对于 fielderror 标签,可以通过嵌套的 param 标签来指定输出特定字段的错误消息。
- actionerror 、 actionmessage 、 fielderror 标签输出消息的布局依赖于使用的主题。
-
示例 : MessageAction .java
- public class MessageAction extends ActionSupport
- public String execute() throws Exception
- addActionError("Action Error Message1");
- addActionError("Action Error Message2");
- addActionMessage("Action Message1");
- addActionMessage("Action Message2");
- addFieldError("field1","field1 error");
- addFieldError("field2","field2 error");
-
示例 : message.jsp
- <%@ page contentType= "text/html;charset=GBK" %>
- <%@ taglib prefix= "s" uri= "/struts-tags" %>
- <h3> 输出 action 的错误消息 </h3>
- <h3> 输出 action 的一般性消息 </h3>
- <s:param value= "'field2'" />
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
Struts标签库是Java Web开发中的一个重要组成部分,它极大地简化了开发者在JSP页面中处理业务逻辑和控制流程的工作。Struts是一个开源框架,最初由Apache软件基金会开发,旨在提供一个MVC(Model-View-Controller)...
Struts标签库是Java Web开发中的一个重要组成部分,主要用于构建基于MVC(模型-视图-控制器)架构的应用程序。这个库极大地简化了JSP页面的编写,提供了丰富的标签来处理常见的Web开发任务,如表单处理、数据校验、...
Struts标签库是Java Web开发中的一个重要组成部分,它极大地简化了基于MVC(Model-View-Controller)架构的Struts框架的应用程序开发。这个“Struts标签库.chm”文件很可能是官方或第三方编写的帮助文档,包含了关于...
Struts标签库是Java开发中基于Struts框架的一个重要组件,它为开发者提供了一系列便捷的JSP标签,简化了Web应用的开发工作。本章主要介绍了五个主要的Struts标签库,分别是HTML标签库、Bean标签库、Logic标签库、...
Struts标签库是Java Web开发中的一个重要组成部分,它极大地简化了基于MVC(Model-View-Controller)架构的Struts框架的应用程序开发。这个“Struts标签库查询手册”提供了全面的指南,帮助开发者理解和使用Struts...
Struts2标签库是Java开发Web应用程序时常用的一个强大工具,尤其在构建MVC(Model-View-Controller)架构的应用程序中发挥着重要作用。Struts2框架提供了丰富的自定义标签库,极大地简化了视图层的开发,使得开发者...
使用Struts标签库可以显著提高开发效率,因为它们提供了内置的类型转换、错误处理和国际化支持。开发者不再需要在JSP页面中编写大量的Java脚本,而是可以专注于页面布局和业务逻辑的分离,从而实现更加清晰和维护...
Struts标签库手册是开发Java Web应用程序时的重要参考资料,尤其对于使用Struts框架的开发者来说,它是不可或缺的工具。Struts是一个开源的MVC(Model-View-Controller)框架,它帮助开发者构建可维护性、可扩展性...
Struts标签库是Java开发Web应用时非常重要的一个组件,它是Apache Struts框架的一部分,用于简化JSP页面的编写,提高代码的可读性和可维护性。Struts标签库提供了丰富的标签,使得开发者可以不用直接在JSP页面上写...
很全面的描述了Struts标签库的使用方法,尽管是英文版的,但是语法非常简单,借用金山词霸完全没有阅读障碍。
Struts标签库是Java开发Web应用时常用的工具,尤其在基于MVC(Model-View-Controller)架构的Struts框架中发挥着重要作用。Struts标签库简化了JSP页面的编写,提高了代码的可读性和可维护性。下面将详细介绍Struts...
Struts标签库是Java Web开发中的一个重要组成部分,尤其在基于MVC(Model-View-Controller)架构的应用中,它极大地简化了视图层的构建。Struts 1和Struts 2都提供了丰富的标签库来帮助开发者高效地创建动态HTML页面...
总的来说,Struts标签库是Struts框架的重要组成部分,它为Java Web开发提供了强大的视图层支持,简化了JSP页面的编写,提高了开发效率。理解和熟练运用这些标签,将有助于提升你在Struts项目中的开发能力。
在使用Struts标签库时,首先要在`web.xml`配置文件中声明每个标签库,然后在JSP页面中通过`<%@taglib>`指令引用。通过这种方式,开发者可以利用Struts的标签库,简化页面代码,提高开发效率,并实现更清晰的MVC分离...
Struts标签库是Java开发中基于Struts框架的一个重要组件,它为开发者提供了方便的JSP标签,使得在页面逻辑中处理数据和控制流程变得更加简洁和直观。这本《Struts标签库手册》是对Struts标签库的详细总结,旨在帮助...
Struts标签库是Java开发Web应用时常用的一个组件,它为Apache Struts框架提供了一组自定义的JSP标签,极大地简化了视图层的开发,使得开发者能够更专注于业务逻辑,而不是繁琐的HTML和Java代码混合。Struts标签库...
本资料主要集中在Struts1.0的标签库学习,下面我们将详细探讨Struts标签库及其在实际开发中的应用。 首先,我们来看"Struts标签库学习——html篇.doc"。这个文档详细介绍了Struts HTML标签库,它是用于构建用户界面...
总之,Struts标签库极大地简化了Java Web开发中的视图层构建,通过提供丰富的标签来处理HTML、Bean、逻辑和模板,使得开发者能更加专注于业务逻辑,而不是繁琐的页面渲染。熟练掌握这些标签的使用,可以提高开发效率...
Struts1 标签库详解 Struts1 标签库是 Apache Jakarta 的一个著名的开源项目,目标是为构建基于 Java 的 web 应用程序提供一个框架。Struts 提供了非常多的标签,依据功能和使用习惯的不同被分到了五个标签库中:...
Struts标签库是Java Web开发中的重要组成部分,主要用于构建MVC(模型-视图-控制器)架构的应用程序。Struts框架提供了丰富的标签库,简化了JSP页面的编写,使得开发者能够更专注于业务逻辑,而不是繁琐的HTML和...