更新时间:2023-01-11 来源:黑马程序员 浏览量:
在Struts2中,Action还有另外一种方式处理请求参数,称为模型驱动(ModelDriven)。模型驱动方式要求Action需要通过实现ModelDriven接口接收请求参数,并且要重写getModel()方法。getModel()方法返回的就是Action所使用的数据模型对象。
与属性驱动中直接使用域对象字段驱动方式的数据传递类似,模型驱动方式也是通过JavaBean模型进行数据传递的。只要是普通的JavaBean,就可以充当模型部分,并且JavaBean中所封装的属性要与表单的属性一一对应,JavaBean就是数据传递的载体。使用模型驱动方式时,Action类中通过getModel()方法获取模型,其示例代码如下所示:
public class LoginAction extends ActionSupport implements ModelDriven<User>{ private User user=new User(); public User getModel() { return user; } public String execute() throws Exception { return "success"; } }
使用模型驱动时,其对应的表单页面也要做相应的调整,调整后的代码片段如下所示:
<form name="forml" action="LoginAction" method="post"> 用户名:<input type="text" name="username"><br/> 密码:<input type="password" name="password"><br/> <input type="submit" value="登录"> </form>
从上述代码中可以看出,使用ModelDriver的方式后,表单中的文本域名称已经不需要添加user前缀,页面上的username会自动对应到这个Model的username属性。
与属性驱动相比,模型驱动不需要在Action类中定义与表单元素一一对应的所有属性及其各属性的getter和setter方法,这减少了Action类中的代码量。在项目应用中具体使用哪种驱动方法,现给出以下几点建议。
(1)要统一整个系统中Action的驱动方法,即要么都使用属性驱动,要么都使用模型驱动。
(2)如果持久层对象与表单中的属性是一一对应的关系,那么建议使用模型驱动,因为模型驱动方法使Action类中的代码更加简洁。
(3)如果持久层对象与表单中的属性不是一一对应的关系,那么建议使用属性驱动,因为不是一一对应的关系时,系统中需要提供两个JavaBean(一个对应表单提交的数据,一个用于持久层对象)。
总之,属性驱动的方法和模型驱动的方法各有优缺点,在实际开发中,需要根据项目实际情况选择使用哪种驱动方式。
【AI设计】北京143期毕业仅36天,全员拿下高薪offer!黑马AI设计连续6期100%高薪就业
2025-09-19【跨境电商运营】深圳跨境电商运营毕业22个工作日,就业率91%+,最高薪资达13500元
2025-09-19【AI运维】郑州运维1期就业班,毕业14个工作日,班级93%同学已拿到Offer, 一线均薪资 1W+
2025-09-19【AI鸿蒙开发】上海校区AI鸿蒙开发4期5期,距离毕业21天,就业率91%,平均薪资14046元
2025-09-19【AI大模型开发-Python】毕业33个工作日,就业率已达到94.55%,班均薪资20763元
2025-09-19【AI智能应用开发-Java】毕业5个工作日就业率98.18%,最高薪资 17.5k*13薪,全班平均薪资9244元
2025-09-19