Struts数据回显和模型驱动
prams拦截器,可以把请求数据自动填充的action的属性中 举例1:
JSP
<input type=text name=userName />
<input type=text name=pwd /> Action
class UserAction{
// 封装请求数据
private String userName;
private String pwd;
//.. set方法
} 举例2:
JSP
<input type=text name=user.userName />
<input type=text name=user.pwd /> Action
class UserAction{
// 封装请求数据
private User user;
..
} 举例3:(模型驱动)
JSP
<input type=text name=userName />
<input type=text name=pwd /> Action
class UserAction{
// 封装请求数据
private User user;
..
}
步骤及原理
步骤:
1. 实现ModelDriver接口
2. 实现接口方法: 接口方法返回的就是要封装的对象
3. 对象一定要实例化。
package loaderman.b_form; import java.util.Map; import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.util.ValueStack; /**
* 1. 数据回显
* 2. 模型驱动
*
*/
public class UserAction extends ActionSupport implements ModelDriven<User> { // 封装请求数据
private User user = new User();
public void setUser(User user) {
this.user = user;
}
public User getUser() {
return user;
} // 实现模型驱动接口方法
@Override
public User getModel() {
return user;
} public String add() {
// 测试: 使用了模型驱动,是否数据正常? Ok
System.out.println(user);
return "success";
} // 进入修改页面
public String viewUpdate() {
// 模拟一个对象(先获取一个id,再根据id调用service查询,把查到的结果保存到域)
User userInfo = new User();
userInfo.setUserName("Jack");
userInfo.setEmail("yuanjie@loaderman.cn"); ActionContext ac = ActionContext.getContext();
// Map<String,Object> request = (Map<String, Object>) ac.get("request");
// request.put("userInfo", userInfo); /************* 数据回显***************/
// 获取值栈
ValueStack vs = ac.getValueStack();
vs.pop();// 移除栈顶元素
vs.push(userInfo); // 入栈 // 进入修改页面
return "viewUpdate";
} // 业务方法
public String index() {
// 保存数据到request域
ActionContext ac = ActionContext.getContext();
Map<String,Object> request = (Map<String, Object>) ac.get("request");
request.put("cn", "China"); return SUCCESS;
}
}
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head> <body> <s:form action="/user_add" method="post">
用户名:<s:textfield name="userName"></s:textfield> <br/>
密码:<s:textfield name="pwd"></s:textfield> <br/> <s:submit value="保存用户"></s:submit>
</s:form>
</body>
</html>
Struts数据回显和模型驱动的更多相关文章
- 一脸懵逼学习Struts数据校验以及数据回显,模型驱动,防止表单重复提交的应用。
1:Struts2表单数据校验: (1)前台校验,也称之为客户端校验,主要是通过Javascript编程的方式进行数据的验证. (2)后台校验,也称之为服务器校验,这里指的是使用Struts2通过xm ...
- struts数据回显
数据回显,必须要用struts标签! Action中: // 进入修改页面 public String viewUpdate() { // 模拟一个对象(先获取一个id,再根据id调用service查 ...
- Struts2第十一篇【简单UI标签、数据回显】
Struts2UI标签 Sturts2为了简化我们的开发,也为我们提供了UI标签-也就是显示页面的标签-.. 但是呢,Struts2是服务端的框架,因此使用页面的标签是需要在服务器端解析然后再被浏览器 ...
- Struts2【UI标签、数据回显、资源国际化】
Struts2UI标签 Sturts2为了简化我们的开发,也为我们提供了UI标签...也就是显示页面的标签..... 但是呢,Struts2是服务端的框架,因此使用页面的标签是需要在服务器端解析然后再 ...
- SpringMVC学习--数据回显
简介 表单提交失败需要再回到表单页面重新填写,原来提交的数据需要重新在页面上显示. 简单数据类型 对于简单数据类型,如:Integer.String.Float等使用Model将传入的参数再放到req ...
- 表单很多数据项录入的时候,提交controller发生异常,数据回显。
1.添加的情况(Model传递Form Data) request.getSession().setAttribute("car", car); //抛出异常的时候,数据回显. 2 ...
- SpringMVC(三) —— 参数绑定和数据回显
参数绑定的过程:就是页面向后台传递参数,后台接受的一个过程. 默认支持的参数类型:(就是你在方法上以形参的形式去定义一下的类型,就可以直接使用它) HttpServletRequest HttpSer ...
- SpringMVC第五篇【方法返回值、数据回显、idea下配置虚拟目录、文件上传】
Controller方法返回值 Controller方法的返回值其实就几种类型,我们来总结一下-. void String ModelAndView redirect重定向 forward转发 数据回 ...
- SpringMVC【参数绑定、数据回显、文件上传】
前言 本文主要讲解的知识点如下: 参数绑定 数据回显 文件上传 参数绑定 我们在Controller使用方法参数接收值,就是把web端的值给接收到Controller中处理,这个过程就叫做参数绑定.. ...
随机推荐
- DP tricks and experiences
[LeetCode] 关于动态规划的经验与技巧. 很多时候多分配一位空间是为了递推的方便,例如前推两位. 辅助数组的索引,用到的可能是 1 — N,或者是 0 — N-1. 具体要看清 f[i] 每一 ...
- Hdu 1851 Nim+巴什博弈
写出SG表 发现SG函数规律为Mi%(Li+1) #include<bits/stdc++.h> using namespace std; int main() { int t; cin ...
- Gradle 配置国内镜像
项目级配置 在项目中找到如下文件 打开,添加上阿里云镜像 maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
- select * from a,b探讨
select * from a,b探讨 今天看同事代码里使用了select * from a,b where a.id=b.id,而我平时都是使用select * from a inner join ...
- Python 多线程Ⅱ
线程模块 Python通过两个标准库thread和threading提供对线程的支持.thread提供了低级别的.原始的线程以及一个简单的锁. threading 模块提供的其他方法: threadi ...
- AOP初步
一刀切的AOP基础 软件开发的目的,最终是为了解决各种需求,包括业务和系统的,使用OOP可以对业务需求等普通关注点进行很好的抽象和封装,并且使之模块化. 但OOP却无法解决类似于日志.安全.事务等系统 ...
- POJ 2109 Power of Cryptography 数学题 double和float精度和范围
Power of Cryptography Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 21354 Accepted: 107 ...
- CUDA-F-1-1-异构计算-CUDA
开篇废话 成熟与智慧其实和年龄相关,但绝不是完全由年龄决定,少年老成的人肯定是存在的,不是长得老,而是心态成熟,当然大多数老年人其实有些事情思考起来还是老原则,所以他们有时候做事没那么周到,所以一个人 ...
- Centos 7自定义屏幕分辨率
$ xrandrScreen 0: minimum 1 x 1, current 1680 x 900, maximum 8192 x 8192Virtual1 connected primary 1 ...
- Android 内存 - 获取单个应用内存限制
方法一: adb shell getprop | grep dalvik.vm.heapgrowthlimit [dalvik.vm.heapgrowthlimit]: [64m] 方法二: Acti ...