Struts学习之模型驱动
* 要从页面中获取表单元素的值,需要在动作类中声明与页面元素同名的属性。导致动作类中既有javabean又有业务方法。
* 将javabean和业务方法进行分离:
* 将重新创建一个javabean,将javabean的内容放置其中。
* 动作类action中只留业务方法
* 在动作类中声明的javabean无法从页面中获取同名的属性
* 需要使用struts2框架提供"ModelDriven(模型驱动)"
* 实现ModelDriven这个接口
* 重写getModel()方法,返回该javabean的实例
* 代码如下:
public class UserAction extends ActionSupport implements ModelDriven<User> {
private User user = new User();
public User getModel() {
return user;
}
public String add(){
System.out.println("UserAction ************* add()");
return "add";
}
public String save(){
System.out.println("UserAction ************* save()");
return "success";
}
}
* 模型驱动的原理:
* 在不使用模型驱动的时候,之所以在动作类中获取不到对应的属性的原因:
* 在ValueStack中没有对应javabean的所有属性
* 模型驱动的作用,就是将javabean的实例压入对象栈的栈顶,从而可以获取到对应的属性的值
页面回显技术:
* 通过模型驱动,在动作类action中,可以获取到页面中元素的值
//方法一
* 通过javabean实例的set()方法,将新的内容set到javabean中,从而放置在页面对应元素中
user.setUsername(newUser.getUsername());
user.setTel(newUser.getTel());
user.setDes(newUser.getDes());
//方法二
* 首先将值栈中,旧的javabean的内容,删除掉
* 然后将新的内容压入到值栈中的栈顶
ValueStack valueStack = ServletActionContext.getContext().getValueStack();
valueStack.pop();
valueStack.push(newUser);
处理表单重复提交:
* 在页面中增加一个隐藏域:<s:token></s:token>
* 创建一个struts.xml的配置文件,具体配置如下:
<!-- 配置默认执行的拦截器栈,增加令牌拦截器 -->
<interceptors>
<interceptor-stack name="tokenStack">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="token" >
<!-- 配置令牌拦截器,拦截的方法名,如果配置多个方法时,用","隔开 -->
<param name="includeMethods">save,update</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="tokenStack" />
* 在struts.xml配置文件中,增加一个result结果类型:
<!-- 配置表单重复提交后,要转向到的页面 -->
<result name="invalid.token">/model/error.jsp</result>
* 在表单重复提交后,要转向到的页面中通过<s:actionerror>获取struts2框架底层提供错误提示信息
* 将struts2框架底层提供错误提示信息改成中文:
* 在与动作类action同级目录下,创建名为"token.properties"的资源文件,文件内容如下:
struts.messages.invalid.token=表单重复提交,请刷新后重试!
Struts学习之模型驱动的更多相关文章
- struts 学习
1.在Struts2的Action中取得请求参数值的几种方法 public class GetRequestParameterAction extends ActionSupport { privat ...
- struts学习总结
-- struts2 是在struts1和webwork基础上发展的全新框架. -- struts2解决的问题: 原始的servlet中,每需要操作一个crud的操作就要创建一个servlet,虽然后 ...
- Struts学习总结 学习
ContextMap 包含值栈包含 root(list结构)和context(map结构) 值栈包含contextMap的引用. Actioncontext是工具类 可以获取他们 Struts2拥 ...
- mzy,struts学习(一)
大家都在讲struts已经过时了,现在都是前后台分离,没有必要去学一个淘汰的框架,但是怎么讲呢?我觉得,struts能够流行那么多年,肯定有它的原因,肯定有很多优秀和好的地方,有一个指导过我的人给我讲 ...
- struts学习
1.集成tomcat到eclipse http://www.eclipsetotale.com/tomcatPlugin.html 下载最新的plug后,解压.解压后的文件放到eclipse的plug ...
- Struts学习总结-04 上传文件
1. upload.jsp <%@ page language="java" import="java.util.*" pageEncoding=&quo ...
- Struts学习总结-02 类型转换
一 类型转换 input.jsp <%@ page language="java" import="java.util.*" pageEncoding=& ...
- struts 学习之问一
今天在进行struts全局类型和局部类型转换时,发现一个问题,如下: 当输入一个点的坐标时,我使用全局转换提示错误,找不到类,当改变成局部类型转换时,可以成功转换,不知道这个是什么原因,难道全局不可以 ...
- Struts学习之流程汇总
struts2 架构图如下图所示: 依照上图,我们可以看出一个请求在struts的处理大概有如下步骤: 1.客户端初始化一个指向Servlet容器(例如Tomcat)的请求: 2.这个请求经过一系列的 ...
随机推荐
- Linux PostgreSQL 基础配置指南
1安装PostgreSQL: yum install postgresql-server 2创建数据库 createdb mydb 如果出现以下错误 ...
- Java数组复制
System提供了一个静态方法arraycopy(),我们可以使用它来实现数组之间的复制.其函数原型是: public static void arraycopy(Object src, int sr ...
- querySelectorAll的BUG
querySelector和querySelectorAll是W3C提供的新的查询接口 目前 IE8/9及Firefox/Chrome/Safari/Opera 的最新版已经支持它们. 但是Eleme ...
- windbg命令学习2
一.windbg查看内存命令: 当我们在调试器中分析问题时, 经常需要查看不同内存块的内容以分析产生的原因, 并且在随后验证所做出的假设是否正确. 由于各个对象的状态都是保存在内存中的, 因此内存的内 ...
- javascript抽象工厂模式
<!doctype html><html lang="en"><head> <meta charset="UTF-8" ...
- 关于hasOwnProperty()方法的应用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 最终有SpringMvc与Struts2的对照啦
眼下企业中使用SpringMvc的比例已经远远超过Struts2,那么两者究竟有什么差别,是非常多刚開始学习的人比較关注的问题,以下我们就来对SpringMvc和Struts2进行各方面的比較: 1. ...
- VBA 开发学习--基础语法3
VBA字符串函数列表 Trim(string) 去掉string左右两端空白 Ltrim(string) 去掉string左端空白 Rtrim(string) 去掉string右端空白 Len(str ...
- appium locator
If you want to find out more about the UIAutomator library, then it might be helpful to check out ht ...
- Nodejs解析HTML网页模块 jsdom
工作需要抓取某些网页,所以今天试用下了node下的jsdom模块.同样功能的还有jquery jsdom https://npmjs.org/package/jsdom API很简单. jsdom.e ...