在Strut2中,页面的数据和Action有两种基本对应方式:分别是:属性驱动(FieldDriven)和模型驱动(ModelDriven)。属性驱动又分为两种情况:一种是基本数据类型的属性对应:另一种是JavaBean风格的属性对应。下面就分别来看看它们是什么意思都如何实现。

属性驱动(FieldDriven):基本数据类型的属性对应

在index.jsp中,我是这样写的

<form action="helloWorldAction.action" method="post">账号:<input type="text" name="account"/><br>密码:<input type="password" name="password"/><input type="submit" value="提交"/></form>

在Action中是这样写的

public class HelloWorldAction extends ActionSupport{private String account;private String password;public String getAccount() {return account;}public void setAccount(String account) {this.account = account;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}//其他代码省略....
}
可以发现,在页面上index.jsp的name的属性,和Action的属性是同一个名称的。这样一来,当页面提交的时候,Struts2会自动从request对象里把数据提取出来,然后按照名称进行对应,自动设置到Action属性里面去。

2.属性驱动FieldDriven(JavaBean风格的属性对应)

(1)先看看域对象的写法,按照JavaBean的风格来写,示例代码如下:

public class HelloWorldModel {private String account;private String password;public String getAccount() {return account;}public void setAccount(String account) {this.account = account;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}
}
(2)这时候Action写法也有变化,主要就是直接使用这个对象,其实就是定义一个属性就是这样对象类型,然后为这个属性提供相应的getter()和setter()方法即可。如果把这个属性的可访问属性设置为public就不需要getter()和setter()方法。Action修改后的示例代码如下:
public class HelloWorldAction extends ActionSupport{private HelloWorldModel hwm =  new HelloWorldModel();public HelloWorldModel getHwm() {return hwm;}public void setHwm(HelloWorldModel hwm) {this.hwm = hwm;}//其他代码省略....
}

(3)Action发生变化后,index.jsp页面中的内容也要进行相应的改变,否则数据就无法正确对应,主要是在相应的name属性上,添加一个域对象的前缀,指明这个值到底是对应到哪宇哥域对象里面去,示例如下:

<form action="helloWorldAction.action" method="post">账号:<input type="text" name="hwm.account"/><br>密码:<input type="password" name="hwm.password"/><input type="submit" value="提交"/></form>
</body>

3.模型驱动(ModelDriven)

它的基本实现方式让Action实现一个ModelDriven的接口,这个接口需要我们实现getModel的方法。这个方法的返回值就是Action所使用的数据模型对象。修改后的示例代码如下:

public class HelloWorldAction extends ActionSupport implements ModelDriven{private HelloWorldModel hwm =  new HelloWorldModel();public Object getModel() {// TODO Auto-generated method stubreturn hwm;}//其他代码省略....
}

在index.jsp中也需要做相应的调整,主要是是去掉刚才给name属性添加的hwm前缀。其示例代码如下:

<form action="helloWorldAction.action" method="post">账号:<input type="text" name="account"/><br>密码:<input type="password" name="password"/><input type="submit" value="提交"/></form>

为什么种方式不需要前缀了呢?

因为使用这种ModelDriven的方式,一个Actiion只能对应一个Model,因此不需要添加前缀,Struts2j就知道,页面上account的值就对应到这个Model的account属性。如果添加上器

转载于:https://blog.51cto.com/dlgqj/1708847

stucts2 页面上的值如何与Action的属性值对应相关推荐

  1. 如何在一个页面上使用多个KindEditor编辑器并将值传递到服务器端

    如何在一个页面上使用多个KindEditor编辑器并将值传递到服务器端 1.声明一个editor数组: 2.将之前的编辑器显示行代码: 3.传递KindEditor所填写的相关数据: 今天使用Kind ...

  2. html如何设置重置按钮,在HTML网页上,表单中元素的TYPE属性值设置为()时,用语创建重置按钮。...

    在HTML网页上,表单中元素的TYPE属性值设置为()时,用语创建重置按钮. 更多相关问题 A non-current asset ( cost $15,000, depreciation $10,0 ...

  3. java对象上有横线_对象bean间属性值复制:无视大小写和下划线_和横杠-

    1.简要说明:在java代码开发过程中,总会遇到实体类bean直接的属性复制问题,将一个bean中的值复制到另一个bean中,这时如果属性名是形同的,(仅仅有大小写或带下划线_或带横杠-)的区别,那就 ...

  4. 由正则表达式提取 html action的属性值,谈零宽断言

    因为实验需要从2w个网页中提取action中的链接,显然用bs4去解析dom树,再去逐个定位form.action.是十分花费时间的. 故笔者就利用正则表达式去解决这一个问题, 我第一步想法是匹配以 ...

  5. Redis中哈希hash数据类型(增加修改(设置单一属性、设置多个属性)、获取(获取键所有属性、获取单一属性值、获取多个属性值)、删除、使用hash可能出现的问题)

    hash⽤于存储对象,对象的结构为属性.值 值的类型为string [应用:如购物车内某个宝贝的所有属性]  [help hset] 1. 增加.修改 1.1 设置单个属性 hset key fiel ...

  6. java xml获取属性值_java – 如何获取具体属性值的特定XML元素?

    我正在尝试通过将所有"< Type>"来从URL解析XML文件.参数type_id ="4218"的元素? XML文档: Football Matc ...

  7. android 动态设置style属性值,android中的style属性值,以及一些预定义样式

    Android平台定义的主题样式:android:theme="@android:style/Theme.Dialog" // 将一个Activity显示为对话框模式 androi ...

  8. html无效的属性值,html – grid-template-areas无效的属性值

    @TemaniAfif提供了一个有效的解决方案但删除了他的帖子. 简短回答: 对于只有一列而不是两列的行,我必须编写"myArea myArea"以使每行的列数相同. 答案很长:如 ...

  9. 通过点击热区,有个href 跳到servlet,怎么把页面上的值传到servlet里面?

    jsp页面:<a href='servlet?parm1=name&parm2=pw'> servlet里面:String name=request.getParameter(&q ...

最新文章

  1. 为ML开发、部署提供靠谱的系统工程方法,NASA、牛津、微软等多家机构提出MLTRL框架
  2. Django 入门项目案例开发(下)——创建项目应用及模型类
  3. Webpack 4 学习09(打包生成html)
  4. 我的Serverless实战——引领云计算的下一个十年
  5. python属性_深入理解python对象及属性
  6. SpringCloud OpenFeign服务调用客户端介绍及配置使用
  7. python时间转换、给定一个以秒为单位的时间t_以秒为单位的历元时间和正常日期的差python...
  8. 比特币——区块链的发展历程
  9. Docker 快速学习(一)
  10. HTML中的特殊字符
  11. Github视频教程-黄棒清-专题视频课程
  12. linux tab键失灵了,Linux grep \t Tab 键失效
  13. ide中项目文件夹右下角蓝色小方块
  14. 经典SQL语句大全-【转载自】博客园,作者博客:YuBinfeng's Technology Blog
  15. 拆分单元格快速复制内容
  16. 联想拯救者R7000P加硬盘
  17. MT6763 N1 色温模式功能的实现,手动调节色温。
  18. cent7虚拟机镜像_centos7.3系统下载
  19. 嵌入式系统课程设计:基于JSoup的鸿蒙教务查询软件
  20. openssl SM2(ECC)自签服务端和客户端证书

热门文章

  1. 7-2 输出约数 (9 分)
  2. java for class_Java ObjectStreamClass forClass()方法与示例
  3. nacos dataid修改配置文件_nacos 配置中心自动化运维之namespace坑
  4. 计算机鼠标不灵活怎么办,电脑鼠标不灵敏怎么调 玩LOL鼠标经常失灵怎么办
  5. java对象布局查看工具_Java 查看对象布局工具 - Java Object Layout
  6. html5上传使用FileReader,Promise图片预览
  7. 黄学长模拟day1 球的序列
  8. 算法导论读书笔记(7)
  9. Fedora最小化安装后没有ifconfig命令
  10. 查看IIS日志 各大搜索引擎是否访问网站