strust知识之四

来源:互联网 发布:中国航天软件评测中心 编辑:程序博客网 时间:2024/06/10 15:16

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表单页面了,防止表单表单重复提交的方式还有更改数据提交方式转发为重定向

0 0