Struts2 接受参数的三种方式及区别(1、属性驱动 2、对象驱动 3、模型驱动)



使用理解:单一的属性用属性驱动,牵涉到对象,推荐使用模型驱动

1、属性驱动

//直接使用属性名,相同即调用set方法自动赋值

//1.Action中准备与参数键相同的属性,并提供相应的set方法,参数值会自动封装到属性中.

//2.封装参数还会帮我们自动类型转换. (8大基本数据类型|指定格式的Date类型)


2、对象驱动

使用域对象,所以属性名需要加对象名(user.name),再赋值。不加对象名,取不到值,赋值为null

//1 action中准备对象属性.并提供对象的set/get方法

//2 表单提交的键格式:对象属性名.属性名


3、模型驱动

表单提交参数直接写属性名,封装user对象

//1 action实现ModelDriven接口.在实现方法中返回封装参数的User对象

//2 表单提交参数时,直接写对象中属性名即可.


strut2接收参数有三种方式(属性驱动\对象驱动\模型驱动),分别对三种进行一个总结:

一.属性驱动

Jsp代码

<body>

       <h1>属性驱动</h1>

       <form action="${pageContext.request.contextPath}/Demo1Action" method="post">

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

              年龄:<input type="text" name="age"  ><br>

              入职日期:<input type="text" name="hireDate"  ><br>

              <input type="submit" value="提交"  ><br>

       </form>

</body>


Action代码


//使用Action获得表单提交参数

//1.Action中准备与参数键相同的属性,并提供相应的set方法,参数值会自动封装到属性中.

//2.封装参数还会帮我们自动类型转换. (8大基本数据类型|指定格式的Date类型)

public class Demo7Action extends ActionSupport {

       private static final long serialVersionUID = 1L;

       private String name;

       private Integer age;

       private Date hireDate;

       @Override

       public String execute() throws Exception {

              System.out.println("name:"+name+",age:"+age+",hireDate:"+hireDate);    

              return SUCCESS;

       }

       public void setName(String name) {

              this.name = name;

       }

       public void setAge(Integer age) {

              this.age = age;

       }

       public void setHireDate(Date hireDate) {

              this.hireDate = hireDate;

       }

}


二.对象驱动

Jsp代码

<body>

       <h1>对象驱动</h1>

       <form action="${pageContext.request.contextPath}/Demo8Action" method="post">

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

              年龄:<input type="text" name="user.age"  ><br>

              入职日期:<input type="text" name="user.hireDate"  ><br>

              <input type="submit" value="提交"  ><br>

       </form>

</body>

 

Action代码

//使用Action获得表单提交参数

//1 action中准备对象属性.并提供对象的set/get方法

//2 表单提交的键格式:对象属性名.属性名

public class Demo8Action extends ActionSupport {

       private static final long serialVersionUID = 1L;

       private User user;

       @Override

       public String execute() throws Exception {

              System.out.println(user);   

              return SUCCESS;

       }

       public void setUser(User user) {

              this.user = user;

       }

public User getUser() {

              return user;

       }  

}


三.模型驱动

Jsp代码

<body>

       <h1>模型驱动</h1>

       <form action="${pageContext.request.contextPath}/Demo9Action" method="post">

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

              年龄:<input type="text" name="age"  ><br>

              入职日期:<input type="text" name="hireDate"  ><br>

              <input type="submit" value="提交"  ><br>

       </form>

</body>

Action代码

//使用Action获得表单提交参数

//1 action实现ModelDriven接口.在实现方法中返回封装参数的User对象

//2 表单提交参数时,直接写对象中属性名即可.

public class Demo9Action extends ActionSupport implements ModelDriven<User> {

       private static final long serialVersionUID = 1L;

       private User user = new User();

      

       public User getModel() {

              return user;

       }

       @Override

       public String execute() throws Exception {

             

              System.out.println(user);

             

              return SUCCESS;

       }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Struts2的ModelDriven确实只能一次封装成一个实体对象,但是可以通过自定义实现多个实体对象模型驱动。具体实现方式如下: 1. 定义一个包含多个实体对象的JavaBean,例如: ```java public class MultiModel { private Entity1 entity1; private Entity2 entity2; // 省略getter和setter方法 } ``` 2. 实现ModelDriven接口,重写getModel方法,将多个实体对象封装到MultiModel对象,并返回MultiModel对象,例如: ```java public class MultiModelDrivenAction implements ModelDriven<MultiModel> { private MultiModel multiModel = new MultiModel(); @Override public MultiModel getModel() { return multiModel; } // 省略其他方法 } ``` 3. 在struts.xml配置文件将该Action关联到对应的请求,例如: ```xml <action name="multiModelDrivenAction" class="com.example.MultiModelDrivenAction"> <result>/success.jsp</result> </action> ``` 4. 在JSP页面使用表单提交多个实体对象的数据,并设置对应的name属性,例如: ```html <form action="multiModelDrivenAction" method="post"> <input type="text" name="entity1.field1" /> <input type="text" name="entity1.field2" /> <input type="text" name="entity2.field3" /> <input type="text" name="entity2.field4" /> <input type="submit" value="提交" /> </form> ``` 注意:name属性需要按照MultiModel对象属性名称进行设置,使用“.”进行分隔。 通过以上步骤,就可以实现一次封装多个实体对象模型驱动了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值