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 = ". ...
一周排行
  • 当初机房重构的时候,因为对EA不怎么熟悉,就一直不想画图.现在合作了,必须要了解一下了. 一.创建工程:        选择相应的模型         二.EA配置        1.工具-选项           ...
  • Understanding Windows and ScreensA window handles the overall presentation of your app's user interface. Win ...
  • 开发Web Services(Web服务)  在Internet上作为服务发布的 软件 是 Web Services的核心. ASP.NET 提供了一个 Web Services的基础构造环境,从而使开发人员能够为 ...
  • 中新网6月3日电 商务部.财政部.环保部三部委今日联合发布<家电以旧换新推广工作方案>(以下简称<方案>),家电以旧换新政策推广实施期延长至2011年12月31日,将在原9个试点省市基础上增加 ...
  • 用vim比较文件   1. 使用vim的比较模式打开两个文件: vim -d file1 file2 或 vimdiff file1 file2   2. 如果已经打开了文件file1,再打开另一个文件file2进行 ...
  •       初学C#的同学们,你们有没有这样的问题:遇到不懂的问题,就到处搜索,好不容易搜索出来答案吧,却发现缺少引用,缺少引用就添加引用吧,结果在添加中找不到!是不是很恼火?       解决办法:查看项目的目标框 ...
  • "全国少儿图书四折封顶"印企出版方不满 本报讯 (记者杜一娜)5月16日,京东商城打出了"全部少儿图书四折封顶"的促销广告,引起部分少儿出版社的强烈不满.5月17日,以中国少年 ...
  • Tuple 是不可变的 list.一旦创建了一个 tuple,就不可以改变它.这个有点像C++中的const修饰的变量.下面这段话摘自Dive Into Python: Tuple 比 list 操作速度快.如果您定 ...
  • //使用方法:// BmpSafe.exe /file2bmp (input BMP) (input file to hide) [output file]//BmpSafe.exe /bmp2file (data ...
  • 关键字:model属性,序列化,反射 正文         model是数据库的映射,在.net web开发中,作为程序的最底层.web开发的一切都是基于数据库的,分了层之后,就基于model了. 为什么要将mode ...