stucts2 页面上的值如何与Action的属性值对应

在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 stub
        return 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属性。如果添加上器
更多相关文章
  • 文/肖梓航 Android开发是当前最火的话题之一,但很少有人讨论这个领域的安全问题.本系列将分两期,探讨Android开发中常见的安全隐患和解决方案.第一期将从数据存储.网络通信.密码和认证策略这三个角度,带你走上Android软件安全开发实践之旅. 过去两年,研究人员已发现Android上的流行 ...
  • 据国外媒体报道,谷歌已经获得了将谷歌眼镜接到帽子上的专利.显然谷歌希望寻找新的方法来整合谷歌眼镜,而不是把它定位成一个独立的设备.
  • 如何获取.properties配置文件中的参数,我在网上查了半天没弄明白,后来在以前的项目中找到了,就写下来,避免遗忘. 1.配置文件:message_product.properties 01 total_product=2 02 service1=1,新股发行短信提醒服务,发行的详细信息 03 ...
  • dojo/aspect模块是dojo框架中对于AOP的实现.关于AOP的详细解释请读者另行查看其它资料,这里简单复习一下AOP中的基本概念: 切面(Aspect):其实就是共有功能的实现.如日志切面.权限切面.事务切面等. 通知(Advice):是切面的具体实现.以目标方法为参照点,根据放置的地方不 ...
  • 前言: 每一门程序设计语言基本都具有一个随机函数,而Java当中产生随机数的方式不拘一格.而且其中的Random工具类还有着更深入的应用,但本文仅对比3种产生随机数的方式,就不深入扩展分析其内部工具类了. 1)System.currentMillis()函数返回基于当前时间的Long整型随机数: 2 ...
  • 工作需要,需要获取win服务器的硬件信息,提交给一api 接口,最后用vbs实现了功能,主要是用到了WMI   发包是调用curl.exe来实现的,代码如下:   REM '获取IP地址' REM '判断DNS是否为空,判断IP地址开头是否为10或192' strComputer = ". ...
一周排行
  • 2015年7月3日,为期三天的2015中国互联网大会将在北京国际会议中心举行.2015年中国互联网大会首次把农业互联网列为重要板块,设置农业互联网高峰论坛.农业门户网站金农网获得此板块的承办权.
  • Given a collection of integers that might contain duplicates, S, return all possible subsets. Note: Elements ...
  • 一.条件判断表达式                                                          条件测试类型: 整数测试 字符测试 文件测试 条件测试的表达式 [ express ...
  • 又一次看题解. 万事开头难,我想DP也是这样的. ,不过还是有进步的. 比如说我一开始也是打算用dp[i][j]表示第i个月份雇j个员工的最低花费,不过后面的思路就完全错了.. 不过这里还有个问题,这样开数组j开多大 ...
  • 博通大中国区总经理梁宜 Wi-Fi(无线保真)技术不断向802.11n标准演变,PC(个人电脑).消费电子和移动通信三大领域不断趋于融合,因此,Wi-Fi技术在上述三大领域中的应用将越来越广泛.而中国3G时代的到来为 ...
  • 今天小编为大家带来了天天酷跑登录送钻石道具有什么 天天酷跑登陆积分作用介绍,感兴趣的朋友们可以跟着小编去下文了解一下哦 今天小编为大家带来了天天酷跑登录送钻石道具有什么 天天酷跑登陆积分作用介绍,感兴趣的朋友们可以跟 ...
  • AVCaptureSession的使用容易freeze的问题 1. http://stackoverflow.com/questions/11905505/avcapturesession-stop-running- ...
  • 上机内容:运算符重载问题,成员函数类型 上机目的:学习 /* * 程序的版权和版本声明部分 * Copyright (c)2013, 烟台大学计算机学院学生 * All rightsreserved. * 文件名称: ...
  • import java.util.Vector; / * 队列是设计程序中常用的一种数据结构. 它类似日常生活中的排队现象,采用一种被称为"先进先出"(LIFO)的存储结构. * 数据元素只能从队 ...
  • 使用ISA Server 2006的DMZ区保护内网的服务器群 在大多数单位中,网络中的所有服务器通常接在核心交换机上,工作站通过接入层交换机接到核心交换机,服务器与工作站划分在不同的VLAN中,如图1所示. 图1 ...