#### 一、逻辑控制标签
用于进行逻辑控制输出,主要包括以下几类:
1. 条件标签:用于执行基本的条件流转。其中的`
```html
```
还有`
2. 迭代标签:用于遍历集合或枚举值类型的对象。该标签的`value`属性表示集合或枚举对象,`status`属性表示当前循环的对象。在循环体内部,可以引用该对象的属性。例如:
```html
姓名:
年龄:
```
3. 组合标签:用于将多个枚举值对象叠加,形成新的枚举值列表。通过`
4. 分割标签:将一个字符串分隔成多个部分,并产生一个枚举值列表。使用`
5. 合并标签:按数组索引位置合并多个枚举值。使用`
6. 排序标签:对一组枚举值进行排序操作。设置`comparator`属性指向一个比较器,该比较器可以是Action页面中的一个比较器变量;通过`source`属性指定要排序的列表对象。例如:使用`
7. 子集标签:用于获取一个枚举列表的子集。使用`
#### 二、其他相关介绍(此处可添加更多关于struts的相关介绍内容)......待补充扩展完善后补充此处内容以丰富文章内容及可读性。二、数据输出标签详解
数据输出标签
数据输出标签用于在页面中展示元素、属性、隐含变量等。这包括静态文本的输出,也涵盖struts2集成的各类变量的输出。具体标签介绍如下:
链接标签
用于创建链接元素,其中包含errorText属性显示错误信息,preInvokeJS属性表示链接执行时的javascript提示函数,以及href属性表示跳转地址。例如:创建一个带有确认删除提示的链接。
Action标签
该标签可直接调用Action类中的函数。前提是Action类在struts.xml中有定义。name属性指向映射文件中配置的Action函数,executeResult属性表示是否执行结果集的跳转。例如:执行LoginAction的默认处理方法或特定处理方法。
JavaBean标签
此标签用于创建JavaBean对象。name表示JavaBean类全名,var表示变量的实例名,并可包含
13)属性标签:用以输出value属性的值,并拥有一个default属性,在value对象不存在时显示。escape属性为true,来输出原始的HTML文本
<s:property value="getText('some.key')">
HTML表单标签
HTML标签都拥有以下3个设置样式的属性。
templateDir:执行模板路径
theme:指定主题名称,可选值包括simple、xhtml、ajax等
template:指定模板名称
使用HTML表单标签会生成大量格式化的HTML代码,这些代码是由struts2的模板生成的,这样的好处是可以让我们的jsp代码十分简单,只需要配置使用不同的主题模板,就可以显示不同的页面样式。
struts2默认提供了5种主题(在此不做详细介绍):
simple主题:简单的主题
XHTML主题:默认主题,使用常用的HTML技巧
CSS XHTML主题:使用CSS实现的XHTML主题
archive主题:使用文档生成主题
AJAX主题:基于AJAX实现的主题
通过在struts.properties文件中改变struts.ui.theme,struts.ui.templateDir,struts.ui.templateSuffix三个标签来自由切实可行换主题
由于HTML表单标签也不少,所以还是要用的时候在网上找吧...
HTML非表单标签
主要用来输出各种错误和消息。
1)错误标签:用以输出Action错误信息
<s:actionerror/>
2)消息标签:用以输出Action普通消息
<s:atcionmessage/>
3)字段错误标签:用以输出Action校验中某一个字段的错误信息或所有字段的错误信息
<s:fielderror/>--输出所有字段的错误信息
<s:fielderror>
<s:param>username</s:param>--输出字段username的错误信息
<s:param>password</s:param>--输出字段password的错误信息
<s:fielderror>
4)DIV标签:用以输出一个<div>标签
AJAX标签
AJAX标签是struts2专门提供的一组进行AJAX操作的标签,在使用这些标签之前,需要在JSP页面中添加如下引用:
<%@ taglib prefix="sx"
uri="/struts-dojo-tags"%>
1)链接标签:用于创建一个<a>链接,并且在单击该链接时执行异步的请求,该标签的url属性必须使用<s:url/>标签进行设置,target属性指向要被更新的页面组件,showLoadingText属性决定是否显示文本,indicator表示异步请求时要显示的图片
使用form标签:
&
日期选择标签
用以弹出一个日期和时间的选择窗口,displayFormat属性指定要选择日期的格式,name表示当前组件的属性的对象,value表示默认值,label表示显示的文本。例如:<sx:datetimepicker name="order.date" label="Order Date" displayFormat="yyyy-MM-dd" value="%{'2006-01-01'}"/>树标签
用以输出一个树形结构。例如:<sx:tree>Tab页标签
使用AJAX的方式显示多个Tab页。例如:<s:tabbedpanel>Struts1和Struts2的区别如下:
Action类
Struts1要求Action类继承一个抽象基类,而Struts2的Action是接口,可实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现常用的接口。Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象。线程模式
Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。而Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。Servlet依赖
Struts1 Action依赖于Servlet API,而Struts 2 Action不依赖于容器,允许Action脱离容器单独被测试。如果需要,Struts2 Action仍然可以访问初始的request和response。其他的元素减少或者消除了直接访问HttpServetRequest和 HttpServletResponse的必要性。可测性
测试Struts1 Action的一个主要问题是execute方法暴露了servlet API(这使得测试要依赖于容器)。而Struts 2 Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”支持也使测试更容易。捕获输入
Struts1使用ActionForm对象捕获输入,而Struts 2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。输入属性可能是有自己(子)属性的rich对象类型。这种 ModelDriven特性简化了taglib对POJO输入对象的引用。表达式语言
Struts1整合了JSTL,使用JSTL EL。而Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言--"Object Graph Notation Language"(OGNL)。绑定值到页面(view)
Struts 1使用标准JSP机制把对象绑定到页面中来访问,而Struts 2使用"ValueStack"技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)。类型转换
Struts 1 ActionForm属性通常都是String类型,使用Commons-Beanutils进行类型转换。而Struts2使用OGNL进行类型转换,提供基本和常用对象的转换器。校验
Struts 1支持在ActionForm的validate方法中手动校验,或者通过Commons Validator的扩展来校验。而Struts2支持通过validate方法和XWork校验框架来进行校验。XWork校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性。基于Struts框架的生命周期管理解析Struts1中的模块生命周期管理
Struts1框架支持每个模块拥有独立的Request Processors(生命周期处理者),但在此框架之下,所有Action必须遵循相同的生命周期路径。这意味着,尽管不同模块间可以拥有各自的处理流程,但在模块内部,Action的生命周期是共享的。这种方式确保了系统各部分之间的协调与统一。
Struts2中的堆栈与生命周期定制
相较于Struts1,Struts2框架提供了更为灵活的机制来管理Action的生命周期。在Struts2中,开发者可以通过配置堆栈(Interceptor Stacks)为每一个Action创建特定的生命周期路径。堆栈能够根据不同的需求和Action进行组合使用,极大地增强了框架的扩展性和可定制性。通过这种方式,开发者可以根据业务逻辑的不同,为每个Action打造独特且符合需求的工作流程。这一机制极大地提升了Struts2的适应性和灵活性,使其能够更好地适应复杂多变的实际应用场景。
无论是Struts1还是Struts2,都在不断地优化和改进框架的各方面性能,以满足日益增长的Web应用需求。而在2024年,随着技术的不断进步和需求的日益增长,Struts框架也将继续发挥其在Java Web开发领域的重要作用。