属性驱动
在Struts2中,可以直接在Action中定义各种Java基本数据类型的字段,使这些字段与表单数据相对应,并利用这些字段进行数据传递,如下面代码所示:域驱动
在属性驱动方式中,如果要传入的数据很多的话,那么Action的属性也会变得很多。再加上属性有对应的getter/setter方法,Action类的代码会非常大,在Action里编写业务代码时,会使Action非常臃肿,不够简洁,因此引入域属性驱动这种方式获取请求参数。
域属性驱动就是将属性和对应的getter/setter方法提取出来,创建一个JavaBean将其封装起来,在相应的Action里直接使用这个对象即可。
UserLogin.jsp
这种方式传值是必须是“对象.属性名”,在jsp页面取值也必须是“对象.属性名”。为什么要这么写了?因为当我们提交表单数据到Action中的时候,找不到username和password属性。此时虽然有user对象属性,但并没有执行getUser()方法获取到user对象,而当我们将username写成user.username,password写成user.password,那么username和password就成为user对象的属性,再提交表单数据的时候,它就会去找Action里面的user对象,这时就会通过getUser()方法获取user对象。
UserLoginAction.java
模型驱动
通过模型驱动方式传递参数的时候,jsp页面可以直接试属性名。使用模型驱动时,必须要求这个Action类实现ModelDriven接口,并重写getModel()方法。
userLogin.jsp
当表单提交数据到对应的Action时,Struts会创建Action,并把Action放入到值栈的栈顶,并且在值栈中有一个model(这里是user)属性,然后通过getModel()方法取出这个model并返回User类型的对象。使用了ModelDriven的方式,一个Action只能对应一个Model,因此不需要添加user前缀,页面上的username对应到这个Model的username属性。
本人第一次写博客,写的不对的地方还请见谅。