Action接收参数
- 简述
- 接收参数
- 方法一
- 方法二
- 方法三
- 封装集合
- 传递错误
01
简述
请求的各种信息参数都是在request对象中,不使用Servlet原生API怎么获取参数呢,Struts2中提供了三种方式(当然原理他还是通过request)
02
方法一
属性封装
直接在Action类中定义与url传入的参数相对应的变量,并设置上set方法,当此url代参数请求后,Action类中对应的变量也就得到了参数的值,这种方法只是在参数少的时候使用并且不能自动封装,当参数多时你需要把这些参数封装在一个对象时需要自己手动去做
03
方法二
表达式封装
创建若干参数形成的对象,Action中直接获取到对象,参数名为“对象名.属性名”对象名对应Action中的,也是需要设置上set方法因为它内部是用反射来获取的。它会自动把名为student.name和student.age的两个参数封装在student对象中并通过点后的字符来匹配对应的类中属性
创建对象
表单传参
Action得到对象
04
方法三
模型驱动的方式
需要实现ModelDrivern接口并覆盖getModel方法,需要手动开辟一个对象给它,它去把参数封装在此对象再返回
ModelDrivern接口
表单传入(name、age)
模板类
action获取
05
封装成集合
封装成列表
通过中括号中的数字来确定是集合中哪个元素(对象),最后再封装在元素中。中括号中就是集合元素的角标。像下面提交后集合会有3个元素第一个也就是角标为0的没有值为空
封装成Map
在中括号的地方自定义key即可
06
接收参数错误
在页面中所有参数值都是字符串的显示,Struts会去自动转化类型。但当你在浏览器提交的参数值与模板类的类型转化不了就会出错,并返回input
下面由于student类中定义的age是Integer类型,传入a这样的字符无法转为整型所以出错,返回input。结果页没有配置input所以出现未找到
原理
在struts-default.xml中配置了很多拦截器,只要拦截器中处理出现问题错误信息就会存在错误信息区,直到最后workflow回去检错误信息区有没有内容如果有就返回input,可以区配置一下input结果页。出错时跳转到相应的页面