【基于初学者的SSH】struts02 数据封装的三种方式详解
struts的数据封装共有3中方式,属性封装,模型驱动封装和表达式封装,其中表达式封装为常用
一:属性封装:
属性封装其实就是自己定义变量,注意变量名要和表单的name属性名一致,然后生成get和set的方法就可以了,使用的话直接自己用属性名就可以了。
二:模型驱动封装:
01):创建实体类(属性名必须和表单的name属性值一模一样)
02):action实现ModelDriven接口
03):实现ModelDriven接口的getModel方法
private 实体类 实体类对象名 = new 实体类();
public 实体类 getModel() {
return 实体类对象名;
}
04):使用实体类对象名即可
05):下面是我自己写的代码
action类:
public class LoginAction extends ActionSupport implements ModelDriven<ELogin>{
@Override
public String execute() throws Exception {
return super.execute();
}
public String admin(){
System.out.println(elogin.getUname()+"---"+elogin.getUpwd());
return SUCCESS;
}
private ELogin elogin=new ELogin();
@Override
public ELogin getModel() {
return elogin;
}
}
jsp界面:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="loginadmin.action" method="post">
用户名:<input name="uname"><br>
密码:<input name="upwd" type="password"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
三:表达式封装:
01):01:创建实体类(属性名必须和表单的name属性值一模一样)
02):private 实体类 实体类对象名;
03):生成实体类对象名的set和get的方法
04):修改表单那么属性值:name="实体对象名.属性名"
这是action类:
public class Login2Action extends ActionSupport {
private ELogin eLogin;
public ELogin geteLogin() {
return eLogin;
}
public void seteLogin(ELogin eLogin) {
this.eLogin = eLogin;
}
public String admin() {
System.out.println(eLogin.getUname() + "---" + eLogin.getUpwd());
return SUCCESS;
}
}
这是jsp页面:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="loginadmin.action" method="post">
用户名:<input name="elogin.uname"><br>
密码:<input name="elogin.upwd" type="password"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
注意:表达式封装与模型驱动封装不可同时在一个action类中使用,否则框架只会用模型驱动封装
ELogin实体类:
public class ELogin {
private String uname;
private String upwd;
public ELogin() {
super();
}
public ELogin(String uname, String upwd) {
super();
this.uname = uname;
this.upwd = upwd;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getUpwd() {
return upwd;
}
public void setUpwd(String upwd) {
this.upwd = upwd;
}
}
表达式封装和模型封装的相同点以及不同点:
相同点:都可以把数据封装到实体类中
不同点:模型封装只能够把数据封装到一个实体类中,在一个action里面只能实现一次ModelDriven的接口所以模型封装只会封装一个到一个实体类中
表达式封装可以吧数据封装到多个对象中
四:ognl表达式写法:导入struts2的标签库(<%@ taglib uri="/struts-tags" prefix="s"%>)
【基于初学者的SSH】struts02 数据封装的三种方式详解的更多相关文章
- 多表连接的三种方式详解 hash join、merge join、 nested loop
在多表联合查询的时候,如果我们查看它的执行计划,就会发现里面有多表之间的连接方式.多表之间的连接有三种方式:Nested Loops,Hash Join 和 Sort Merge Join.具体适用哪 ...
- Spring依赖注入三种方式详解
在讲解Spring依赖注入之前的准备工作: 下载包含Spring的工具jar包的压缩包 解压缩下载下来的Spring压缩包文件 解压缩之后我们会看到libs文件夹下有许多jar包,而我们只需要其中的c ...
- React中使用 react-router-dom 路由传参的三种方式详解【含V5.x、V6.x】!!!
路由传值的三种方式(v5.x) params参数 //路由链接(携带参数): <Link to='/demo/test/tom/18'}>详情</Link> //或 <L ...
- 多表连接的三种方式详解 HASH JOIN MERGE JOIN NESTED LOOP
在多表联合查询的时候,如果我们查看它的执行计划,就会发现里面有多表之间的连接方式. 之前打算在sqlplus中用执行计划的,但是格式看起来有点乱,就用Toad 做了3个截图. 从3张图里我们看到了几点 ...
- springmvc 异常统一处理的三种方式详解
1 描述 在J2EE项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的.不可预知的异常需要处理.每个过程都单独处理异常,系统的代码耦 ...
- 基于JavaScript 声明全局变量的三种方式详解
原文地址:http://www.jb51.net/article/36548.htm JS中声明全局变量主要分为显式声明或者隐式声明下面分别介绍. 声明方式一: 使用var(关键字)+变量名(标识符) ...
- mysql备份的三种方式详解
一.备份的目的 做灾难恢复:对损坏的数据进行恢复和还原需求改变:因需求改变而需要把数据还原到改变以前测试:测试新功能是否可用 二.备份需要考虑的问题 可以容忍丢失多长时间的数据:恢复数据要在多长时间内 ...
- Mysql 删除数据表的三种方式详解
用法: 1.当你不再需要该表时, 用 drop; 2.当你仍要保留该表,但要删除所有记录时, 用 truncate; 3.当你要删除部分记录或者有可能会后悔的话, 用 delete. 删除强度:dro ...
- [转]hibernate三种状态详解
本文来自 http://blog.sina.com.cn/u/2924525911 hibernate 三种状态详解 (2013-04-15 21:24:23) 转载▼ 分类: hibernate ...
随机推荐
- firebug中html显示为灰色的原因总结
1.被设置了display:none. 2.长.宽都为0.
- [rejected] master -> master (fetch first)
可以输入: git push -f 可以ok了. 确实是OK了,但是不知道原理,待后来解
- [JavaScript] 根据字符串宽度截取字符串
/** * 根据字符串宽度截取字符串 * @param desc 原始字符串 * @param width 该显示的宽度 * @param fontsize 字体大小 12px * @returns ...
- Pycharm使用Git
Pycharm使用Git 1.设置git程序路径 2.设置github连接 3.创建git respository 4.提交文件 5.共享给GitHub 6.修改文件push到版本库 7.从版本库ch ...
- 析构方法 deinit
/* 析构方法: 对象的内存被回收前被隐式调用的方法, 对应OC的dealloc方法 主要执行一些额外操作, 例如释放一些持有资源, 关闭文件, 断开网络等 */ class FileHandle { ...
- java异常层次机构图
以下内容转自:http://www.cnblogs.com/toSeeMyDream/p/5213610.html 在Java中,异常分为受检查的异常,与运行时异常. 两者都在异常类层次结构中.下面的 ...
- J01-Java IO流总结一 《异常捕获》
下面演示java中处理I/O操作时的异常的正确方式,总结自书籍,书名忘啦~ 先看一种不正确的方式 方式一: import java.io.FileInputStream; import java.io ...
- php生成markdown格式的数据库字典
<?php /** * 生成mysql数据字典 */ //数据库配置 $config = [ 'host' => '192.168.43.134', 'user' => 'root' ...
- Ubuntu14.04安装之后的一些配置
不多说,直接上干货! 主要分为 一.root用户的开启和vim编辑器的安装 二.ssh的安装 三.静态ip的设置 四.中英切换文环境切换 一.root用户的开启和vim编辑器的安装 Ubuntu在默认 ...
- sql 递归树
with CTE as ( -->Begin 一个定位点成员 select ID, PersonName,ParentID,cast(PersonName as nvarchar(max)) a ...