struts2学习---中级篇
1:action的寻找顺序:
如果有三个action,一个name叫User_Add,一个name是User_*,一个name是*_*,你会发现,当你访问时,这3个action都会匹配.
此,首先匹配最精确的,其次按照代码的顺序匹配带*号的
2:action接收参数:三种方式,参考3,4,5
示例:当你输入url:http://localhost:8080/aaa时,点击页面的一个链接后,
url会变成:http://localhost:8080/aaa/user!add?name=mm&age=8 ,怎么会变成那样的?参考3
3:第一种:在自己的action类中,定义属性name和age,并写好get和set方法。
然后在写action的时候带入参数“login!add?name=1&age=8”即可
4:第二种:使用Domain Model(域模型)接收参数。如图:action类的属性是一个类
浏览器url如图:
但是,如果在用户登陆模块里,有密码确认该选项,域模型就行不通了。
此时:新建类UserDTO,如图:
然后在action里面定义dto属性,此时前台输入的参数就会和dto匹配了,在相应的方法里处理完之后,再生成dto对象生成一个user对象。
如何生成?从dto里面拿出对象,填到实体类user里面
DTO(数据传输对象)的执行过程:首先在action中把dto对象填充好,然后把这个dto整体交到domain中去,【new User(UserDTO dto)】。
何时用?当页面的参数和实体类属性不匹配的时候,有两种接收方式,一是利用属性单独接收,二就是用dto
5:第三种:用ModelDriven(模型驱动)接收参数(不常用,但是隐含了一种重要的思想):
在action类中实现了ModelDriven<User>接口,此时user必须自己new,并且必须有getModel()方法用以返回user
struts2如何将参数传递给user的?
struts2接收到两个参数后,就会去new action,会发现该action实现了一个ModelDriven接口,然后调用getModel方法,返回一个Model是user,拿到user之后就可以setName咯
6:struts2的中文解决办法:用2.0的filter
7:错误页面的反馈
8:简单的数据校验
9:后台向前台的页面传递值
10:<s:property>专门取value stack和stack context中的属性
value stack中的属性如何取?直接写他的名字即可。eg:<s:property value="errors"/>