ValueStack对象
概述:
Action类通过属性可以获得所有相关的值,如请求参数属性值等。要获得这些参数值,我们要做的唯一一件事就是在Action类中声明与参数同名的属性,在Struts2调用Action类的Action方法(默认是execute方法)之前,就会为相应的Action属性赋值。要完成这个功能,有很大程度上,Struts2要依赖于ValueStack对象。这个对象贯穿整个Action的生命周期,每个Action类的对象实例会拥有一个ValueStack对象。
也就是说:
value对象是进行参数传递的工具
并且伴随action整个生命周期
包括两部分:
1、放在根元素中
这里的特点有:
1》通过在action的值对象中找到它
2》可以放普通数据
3》访问可以不带#
下面上代码:
ValueStack valueStack = ActionContext.getContext().getValueStack();
CompoundRoot root = valueStack.getRoot();
User user=new User();
root.push(user);
2.放在非根元素 Actionntext.getContext().getContextMap().put("request","request域对象的数据"); ActionContext.getContext().getSession().put("session","我是Session域对象的数据"); ActionContext.getContext().getApplication().put("application","Application域对象的数据");
返回的jsp页面
<!--struts常用的标签-->
<s:form name="sName" id="sNamId" theme="simple" action="/login">
<s:textfield id="userName" value="" label="用户名"></s:textfield>
<s:textfield id="userPwd" value="" label="密码" ></s:textfield>
<!--提交的标签-->
<s:submit value="提交"></s:submit>
</s:form>
<!--收集错误信息的标签-->
<s:fielderror></s:fielderror>
<!--收集指定的错误信息-->
<s:fielderror name="user.userName"></s:fielderror>
<!--页面的调试-->
<s:debug></s:debug>
<!--struts取值的标签-->
下面是根元素的数据的取值方式:
<s:property value="userName"/>
非根元素的取值方式
访问request域可以不带request.
session,application是存在{}对象中的,request是直接存的值
<s:property value="#name"/>
<s:property value="#session.name"/>
<s:property value="#application.nam"/>
struts2的数据校验方式
1、前端通过js校验
2、服务端进行校验
实际上这是控制器的功能
代码的方式
方式一、校验所有的方法
创建一个action继承actionSupport
重写validate方法
校验逻辑写在里面
方式二、校验置顶方法
如要校验register这个方法
只需添加一个validate+register的方法
public void validateRegister() {
校验逻辑...
super.validate();
服务端校验之二、
在xml文件中校验
全局验证
适合于要校验的东西较多的情况
在/com/opensymphony/xwork2/validator/validators/default.xml这个目录下找到服务器为我们提供校验文件
1、这个文件必须位于要校验的action同目录,文件名必须是action名-validation.xml
2、需要服务器的配置头
3、要验证字段的书写方式
区分为type=”requiredstring”配置不同
<field name="user.userName">
<field-validator type="requiredstring">
<message>用户名为空</message>
局部验证
文件名改为
Action类名-Action对象-validation.xml
模型驱动
功能如下:
数据回显
防止表单重复提交
1、实例化这个对象(实体)
2、继承ModelDriven<实体类名>
数据回显功能实现:
ValueStack valueStack = ActionContext.getContext().getValueStack();
valueStack.push(实体对象);
这样数据就回显到jsp表单页面了,防止表单表单重复提交的方式还有更改数据提交方式转发为重定向