用Struts的动态form添加时为啥有的属性获取不到值?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用Struts的动态form添加时为啥有的属性获取不到值?相关的知识,希望对你有一定的参考价值。
我用的是实体类,有的属性能获得值,有的获取不到值,请问哪位大哥大姐知道告诉我,谢谢!
我的属性名对应好了啊!我用的是实体类!
DynaActionForm df = (DynaActionForm)form;
String u = (String)df.get("(form的属性名)");
要这样才能取到值的 参考技术A property属性对应你实体类里的名称,如果名称没错,应该就可以获得, 参考技术B 动态form用getXXX()方法获得属性值 参考技术C 估计是你设置了只读属性,另加个隐藏域,从隐藏域中取值
Struts2获取参数的几种方式
Struts2由于是一个贴心的框架,所以获取参数这种体力活,就无需再通过原生的request来getParameter了,有如下几种方式进行获取
1、Action中属性驱动,必须提供与form表单name相同的后台属性get/set,这种方式适合数据量比较少的form表单提交
2、大数据量的form表单,这时一般对应后台的一个实体类,所以这时还在每个action写属性驱动,那就会代码冗余,这时可以定义一个对象来属性来进行参数接收,如User对象,只是前台传参数的时候,需要先写对象名再点对象下的属性的写法,这种写法有点是可以定义多个对象属性进行接收,缺点是前台传参比较麻烦,例子如下:
|
|
3、但是对象驱动还是不太方便,需要前台传参数时写出对象的名再点出属性值,所以还可以使用更方便的模型驱动,不需要写出类变量名再点属性,直接写类变量的属性名就可以把数据提交给模型自动接收,只需要Action实现ModelDriven<T>即可,模型驱动和类属性驱动本质差不多,但必须在Action中先new进行实例化,当然如果还有额外的不属于模型的属性需要传递,但是由于模型没有相应属性,所以无法接收,这时还需要自己在Action中添加相应的属性驱动来进行接收,模型驱动的缺点是只能接收一个模型类,不如对象驱动可以定义多个进行接收,但是优点是前台传参方便
|
|
4、参数接收类型说明:常用的8大基本数据类型都可以实现自动装箱,不过定义成员变量时建议使用包装类型,因为包装类型可以接收null值,还有一点需要注意的就是8大基本数据类型中的日期类型格式只支持2017-08-6这种格式,而不支持2017/08/6等其他类型,所以为了方便,在jsp界面上就不让用户输入日期,而是采用只读形式的日期选择控件,限定为-这种形式,反正中国人大都喜欢-这种形式的日期,尤其是内网开发更不必要去进行复杂而无谓的日期格式转换定义
5、集合参数封装,form表单中name相同的表单值会自动封装到集合属性中
5.1)、List集合封装
|
|
显示结果为:
如果是一个个以相同名,如上,进行提交,那么List集合接收到参数会自动进行顺序add,而如果提交时指定了索引位置,那么会自动提交到list集合的指定位置,如
|
结果为
|
5.2)、Map集合封装,传参数时得以中括号区分键
|
|
结果为:
以上是关于用Struts的动态form添加时为啥有的属性获取不到值?的主要内容,如果未能解决你的问题,请参考以下文章
反射学习2-通过反射机制动态获取属性的值模拟Struts的自动赋值