一、跟踪用户状态
Struts2提供了一个ActionContext类,该类提供了一个getSession的方法,该方法返回值类型为Map。
ActionContext.getContext().getSession().put(“user”, getUsername());
设置一个Session属性及其值,在返回页面可以调用到。
二、保证处于登陆状态
在第一部分中将用户登陆信息加入到Session中以后,以后的在每一个业务逻辑处理之前需要先验证Session的属性的存在
String user = ActionContext.getContext().getSession().get(“user”);
If(user = null) return this.LOGIN;
三、显示结果
在Struts2的Action类中,通过Setter方法将相关属性值及处理结果存于一个变量中,而所有的变量都保存在一个ValueStack对象中。可以通过OGNL语句方便地访问ValueStack中所有的信息。ValueStack类似于 Map结构。但功能更强大。
//获取封装信息中的ValueStack对象
ValueStack vs = (ValueStack)request.getAttribute("struts.valueStack");
//调用ValueStack 中的fineValue方法获取Action中的 books信息
// books为一个字符串数组
String[] books = (String[])vs.findValue("books");
//调用循环语句显示所有信息
四、采用struts标签来显示结果
if : 该标签支持标签体,如果IF标签里判断的表达式返回真,则输出标签体内容
else : 该标签不能独立使用,它需要与IF标签结合使用,如果IF标签内判断的表达式返回假,则输出该标签的标签体。
iterator : 主要用于迭代输出某个集合属性的各个集合元素
property : 该标签用于输出指定属性值
<!—迭代输出ValueStack中的 books对象,其中status是迭代的记号 -->
<s:iterator value="books" status="index">
<!—判断记号是否为奇数 -->
<s:if test="#index.odd == true">
<tr style="background-color:#cccccc">
</s:if>
<!—判断记号是否为偶数 -->
<s:else>
<tr>
</s:else>
<td>书名:</td>
<td><s:property/></td> 取出对应记号下的值显示
</tr>
</s:iterator>
使用iterator迭代输出ValueStack中的books数组,并为每个数组元素定义一个记号:index。通过判断记号的奇偶输出不同风格的表格。、
五、Struts2 UI组件
form : 对应一个表单元素
checkbox :对应一个复选框元素
password :对应一个密码输入框
radio :对应一个单选框元素
reset :对应一个重设按钮
select :对应一个下拉列表框
submit :对应一个提交按钮
textarea :对应一个多行文本域
textfield :对应一个单行文本框
六、使用Struts2校验框架
通常是通过继承了ActionSupport类再重写其validate()方法来进行校验,但是Struts2还提供了大量的校验框架。对于String类型的数据使用一个requiredstring校验器,它是一个必填校验器,就是其校验的内容不能为空。
其定义文件为:
<?xml version="1.0" encoding="GBK"?>
<!-- DTD -->
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator
1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<!-- -->
<validators>
<!—校验第一表单域username -->
<field name="username">
<!—该表单必须填写 -->
<field-validator type="requiredstring">
<!—如果校验失败,显示user.required对应的信息 -->
<message key="user.required"/>
</field-validator>
</field>
<!—校验第二个表单域password -->
<field name="password">
<field-validator type="requiredstring">
<!—如果失败,显示pass.required -->
<message key="pass.required"/>
</field-validator>
</field>
</validators>
该文件命名规则:
ActionName-validation.xml: 其中ActionName就是需要校验的 Action类名,与Action类的class文件位于同一目录下。