注册用户享全站资源 并成为粉丝 不定时福利发放
 
非盈利性学习社区
分享网站

分享网站

让更多人可以获取免费教程

文章分类导航

文章分类导航

精品

合作广告

合作广告

最大优惠

人事面试

人事面试

套路太深

面试过程中,面试官会向应聘者发问,而应聘者的回答将成为面试官考虑是否接受他的重要依据。对应聘者而言,了解这些问题背...

部分企业人事部收到求职者简历后,会预先进行一轮电话面试,来考察求职者的综合素质,因此了解懂得求职面试的基本技巧,将...

1、着装要适当  穿着不一定要名贵,但一定要合体、干净、整洁,而且颜色和图案的搭配一定要协调。鞋子应该是舒服而又引...

一、隐瞒真实个人资料的不诚实者简历是求职的第一步,只有面试官对你的简历有兴趣才会通知你面试。在简历中适当地突出个人...

一、首先你得已经成为公司里“最好”的程序员,或者你已经找不到可作为老师和导师的人关于这一点,很多人都会过度自信,所...

程序人生

程序人生

技术的另一面

2017年初,网上流传华为公司正在清理34岁以上的员工。"中国区开始集中清理34+的交付员工,......去向是跟...

程序员不是你们眼中的程序猿-后IT时代。程序猿是一种非常特殊的、可以从事程序开发、维护的动物。

1.某程序员的QQ签名:为API生,为框架死,为debug奋斗一辈子,吃符号亏,上大小写的当,最后死在需求上2.去...

Web应用,最常见的研发语言是Java和PHP。后端服务,最常见的研发语言是Java和C/C++。大数据,最常见的...

1、第一份工作的选择很重要。不要想着我没有选择的机会,有份工作就不错了,现实情况是进了一行,想出来很难,想转行更难...

程序员段子

程序员段子

乐一乐

皇上太拼了......  被电视剧蒙骗了好多年,三观毁灭!  这是传说中“帅气的王爷”与“美腻的王妃”,像不像屠夫...

足够自信的程序猿自信是通往成功路上的指明灯,自信的程序员更是加班夜里的探照灯,总能让BUG无所遁形。效率高的程序猿...

最近这段时间,小编絮絮叨叨说了很多严肃的东西,今天说点好玩的,轻松一下。娱乐圈有潜规则,小编认为IT圈一样,也有潜...

今天来说说一位女青年的老公以及他们的事儿。如有雷同,纯属巧合。十一年前我和程序猿第一次见面,还是大一军训期间。我甚...

公司高层公司副总A:咱们开个会研究一下这个事情怎么处理。公司副总B:如果老板没有救成功,下任是谁呢?会不会影响公司...

Action是如何接受请求参数的

发表时间:2018-01-16 17:48

属性驱动和模型驱动  

Struts2内部提供了参数封装功能,不需要使用BeanUtils进行封装。Struts2大部分内置功能都是拦截器实现的。

当点击登录提交表单时,就会被下面的拦截器进行封装,进行set注入值,实现参数封装。

<interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>

第一种Action 本身作为model对象,通过成员setter封装 (属性驱动 )

主要用于参数较少的封装,如果分层,不利于将数据传递到业务层。

页面:      

用户名:<input type="text" name="username" /> <br/>

Action:  

public class RegistAction1 extends ActionSupport {

    private String username;

    public void setUsername(String username) {

this.username = username;

}

}

Struts2 action是多实例,不会有线程安全问题,使用这种数据封装方式,数据封装到action属性中,不能将action对象传递给业务层,我们需要再单独定义javabean,将action属性封装到javabean。

第二种创建独立model对象,页面通过ognl表达式封装 (属性驱动)

具体封装流程如下:传递username,调用setUsername,把username注入User中,将会新建一个User对象,当第二个参数password传递过来时,struts框架将首先调用getUser方法询问User是否为空,如果为空,将会新建一个User,否则不会新建,直接注入值。如果只有一个Set方法,那么每set一次数据,就会新建一个User对象,那么就是把usernamepassword封装在两个不同的User对象中了。这样封装失败。

页面:

<!--基于OGNL表达式的写法-->

用户名:<input type="text" name="user.username" /> <br/>

 码:<input type="password" name="user.password" /> <br/>

model(User):

public class User {

   private String username;

   private String password;

   public String getUsername() {

       return username;

   }

   public void setUsername(String username) {

       this.username = username;

   }

   public String getPassword() {

       return password;

   }

   public void setPassword(String password) {

       this.password = password;

   }

}

Action:

public class RegistAction2 extends ActionSupport {

   private User user;

public void setUser(User user) {

   this.user = user;

}

   //必须提供get方法(封装第一个参数时,创建新的User对象, 封装第二个参数需要使用第一个创建user对象)

public User getUser() {

   return user;

   }

}

params的拦截器完成参数的封装

<interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>

第三种使用ModelDriven接口,对请求数据进行封装 (模型驱动 ) ----- 企业开发的主流(模型驱动有很多特性)

<interceptor name="modelDriven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/> 为模型驱动提供了更多特性

页面:

用户名:<input type="text" name="username" /> <br/>  

model(User):

public class User {

   private String username;

   private String password;

   public String getUsername() {

       return username;

   }

   public void setUsername(String username) {

       this.username = username;

   }

   public String getPassword() {

       return password;

   }

   public void setPassword(String password) {

       this.password = password;

   }

}

Action :

public class RegistAction3 extends ActionSupport implements ModelDriven<User> {

   // 模型对象必须手动实例化

   private User user = new User();

public User getModel() {

   return user;

}

}

对比第二种、第三种第三种只能在Action中指定一个model对象(返回一个model对象),第二种可以在Action中定义多个model对象  

<input type="text" name="user.username" />

<input type="text" name="product.info" />


Java帮帮公众号生态

Java帮帮公众号生态

总有一款适合你

Java帮帮-微信公众号

Java帮帮-微信公众号

将分享做到极致

Python帮帮-公众号

Python帮帮-公众号

人工智能,爬虫,学习教程

大数据驿站-微信公众号

大数据驿站-微信公众号

一起在数据中成长

九点编程-公众号

九点编程-公众号

深夜九点学编程

程序员服务区-公众号

程序员服务区-公众号

吃喝玩乐,听学吐画

Java帮帮学习群生态

Java帮帮学习群生态

总有一款能帮到你

Java学习群

Java学习群

与大牛一起交流

大数据学习群

大数据学习群

在数据中成长

九点编程学习群

九点编程学习群

深夜九点学编程

python学习群

python学习群

人工智能,爬虫

测试学习群

测试学习群

感受测试的魅力

Java帮帮生态承诺

Java帮帮生态承诺

一直坚守,不负重望

初心
勤俭
诚信
正义
分享
战略合作
关于我们
友链申请
友链交换:加帮主QQ2524138991 留言即可 24小时内答复  
快速换友链:在你的网站设置好Java帮帮-IT免费资源网友链,截图发给帮主即可
会员登录
获取验证码
登录
登录
我的资料
留言
回到顶部