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 = ". ...
一周排行
  • 本月,锤子手机正式发售,不料这款经过罗永浩两年酝酿的产品最后却恶评如潮.自2006年于新东方辞职后,罗永浩似乎一直在探索一种新的发展方式.早年曲折的人生经历并没有让他满足于稳定和安逸,除了现在的锤子手机外,他还有另一 ...
  •   原创地址:http://www.cnblogs.com/jfzhu/p/4022139.html 转载请注明出处   (一)创建Web Service 创建第一个项目,类型选择ASP.NET Empty Web ...
  • 文凭-决定的人生成败?<下> ****************************************************************************** Author:L ...
  • Web service standards: SOAP, REST, OData, and more So far, we've covered the components of a web service, th ...
  • /*豆腐制作 都是精品http://www.asp888.net 豆腐技术站如果您转贴 本文 请 保留版权信息*/ <script language="vb" runat="ser ...
  • Margin:往外 Padding:向里 Width Height Right Left Top Bottom 每一个标签都可以成为一个小盒子,每个小盒子都有以上这些属性,来确定要展现的内容,有规则的拼接在一起来展现 ...
  • 概述: [email protected]:~/software$ git clone https://github.com/twitter/twemproxy.git 1 2 3 4 5 6 7 8 9 10 11 12 ...
  • XPM(X Pixmap)是X Windows系统使用的一种图片文件格式.最初由位于法国Sophia Antipolis的Bull研究中心的Daniel Dardailler和Colas Nahaboo发明,后来Ar ...
  • nexus 6电池续航能力如何?作为Google的最新亲儿子手机Nexus 6,他的电池续航能力备受很多人关注,那么这款手机充电会不会很费时间呢?下面小编就为大家带来了Nexus 6电池续航测试,一起来看看吧 Goo ...
  •         于是我妥妥的回归了.         weebly虽然定制功能强大,还能穿越时空发博文,但是太麻烦了,而且用着也不像一个博客.         既然解决了这个问题,那Lofter除了行间距也没什么缺点 ...