Struts2的页面参数获取

Struts2的页面参数获取

在学习Servlet的过程中,我们可以实现前后台的连接和传值。框架的存在就是为了方便我们进行开发,简化我们的开发流程,让我们可以少写一些代码就能实现某些功能。那么在Struts2框架中,我们有很多种的方法区获取参数,以下我以一个继承了ActionSupport类的子类为例子。在这个类中,我们可以通过servlet获取参数、也可以通过ActionContext获取、通过在Struts2中常用的模型驱动获取、表达式封装、属性封装获取以及域模型获取。

1.使用Servlet时,我们需要先获取request对象,然后才能通过request对象获取请求中的参数值。获取request对象的代码如下:
HTTPServletRequest request = ServletActionContext.getRequest();

Servlet与Action的区别在于Servlet是多例的对象,而Servlet是单例的对象。在Action中,每个请求都会创建一个ActionContext对象,所以Action是线程安全的。在Action类中,可以存在成员变量,而在Servlet中一般不会定义成员变量,因为可能会出现线程安全的问题。

2.使用ActionContext获取请求参数如下所示:
1° 先获取ActionContext对象 ActionContext context = ActionContext.getContext();
2° 通过Map集合接收所有的参数 ·Map params = context.getParameters();·
3° 获取参数值组成的数组(因为有多选框的存在,所以参数值是一个数组类型) String values = (String[]) params.get("参数名");

3.通过模型驱动封装
1° 让这个Action类实现ModelDriven接口,并且在Action类中声明相应的成员变量,这个变量是自定义的实体类。
2° 实现接口中的getModel()方法,返回相对应的实体类对象
3° 在Action类中,创建实体类对象,数据会自动封装到这个实体类对象中去

4.通过表达式封装获取
1° 在action类声明实体类
2° 生成实体类变量的set/get方法
3° 在表单输入项的name属性值里面写表达式形式(输入框的name属性值为对象.成员变量,例如 name="user.userName")

5.在使用属性封装时,我们可以把这个Action当成我们常用的自定义类型,并为这个类中的成员变量提供相应的set/get方法,此时我们需要保证前端页面输入框的name属性值和我们在Action类中声明的成员变量名称一致。但是此种方式不能直接把页面中的数据值直接封装到我们的实体类对象中去,需要我们自己手动的为实体类对象赋值。如果我们同时使用了属性封装和模型驱动封装去获取同一个表单得数据,那么只会执行模型驱动封装,而不会执行属性封装。

表达式封装和模型驱动封装的比较

相同点:他们都可以将数据封装到实体类对象当中去
不同点:模型驱动封装只能把数据封装到一个实体类对象当中去,因为getModel()方法只会返回一个实体类的对象;而表达式封装则可以把数据封装到不同的实体类对象里面。

你可能感兴趣的:(Struts2)