开发者学堂课程【Java Web开发系列课程 - Struts2框架入门:模型驱动二】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/537/detail/7300
模型驱动二
ModelDriven,首先表单的数据改成 regDriven,不需要对象的名字,直接拿对象的属性,把 Action 改成 Driven。
写一个 UserDrivenAction,跟刚刚的 action 不一样了,刚刚是 Java 的一个普通的类,现在实现 ModelDriven 的一个接口,里面有一个类型。如果想要从页面表单上提供对象的类型,需要写出来,写 user,方法叫 getmodel,getmodel 需要返回指定的对象。
在 Action 中写上获取对象的属性,对象是为空的,Struts2把它注入进来,使用ModelDriven 进行开发,把这个对象直接创建出来。把这个对象给 get user,可以把user 输出来看一下,直接拷贝,这些不改变,直接拿过来。
当然如果页面上需要显示的话,也需要用 get set 的方法。在页面上把 user 显示出来,配置一下。
结果成功后,尝试跑一下。然后访问 regDriven,把年龄,邮箱写上,提交,把数据获取到。
说明 jsp 页面中获取数据时只需要把对象写上,不需要把 user 加上去,通过ModelDriven 方式在 Action 将表达的数据写进来,比刚刚的属性写的页面稍微少一些。
Action 都提供一些接口,具有侵入性。建议在某个对象的类写的特别多的时候,使用ModelDriven 进行开发,页面可以少写一些代码。
实现 ModelDriven 的方法,里面有一个拦截器。Struts2里面的核心内容都是通过拦截器来实现的,把 ModelDriven 带入,把值注入到 action 里,通过拦截器实现。
拦截器主要的方法是 intercept,首先获取要执行目标的 action,And do an action 是否属于 ModelDriven 的这样的一个接口类型,如果不是的话 直接往下走了,只有是这个类型 才会继续往下执行。
Action 中通过 ModelDriven 实现 ModelDriven Intercept 功能的话,这个 action 必须要实现 ModelDriven 这样的一个接口,因为只有属于这样的借口的话 在这个地方判断的话,他才会属于 ModelDriven 这样的类型,接着才会把值设置进来。
UserDriven Action 里面实现了一个getModel方法,本质是在 ModelDrivenintercept里面调用的方法,如果这个方法和这个 getModel 不等于空的时候,才会把值放进,做一些处理。如果等于空,是不会做这样的事情的。
需要把对象创建出来,和属性驱动不太一样的地方。因为属性驱动是由 Struts2来传的,而 ModelDriven 对象是由自己创建的。struts2会将页面的表单数据设置到对应的类型数据上去,这是使用 ModelDriven 进行开发。
Jsp 代码
不需要把 User 加上,属性名称不用加上去。
<form action="regDriven. action" method="post">
用户名:<input type="text"name="name"/><br>
密码:<input type=""name="pwd"/><br>
年龄:<input type="text"name="age"/><br>
邮箱:<input type="text"name="email"/><br>
<input type="submit"value=提交”/>
</form>
Action 代码
关注实现接口,还有 getModel。
public class UserDrivenAction implements Model Driven< User>
private User user =new User()
/注册
public String register(
System.out. printIn(user);
return Action. SUCCESS:
}
public User getModel(){
return user;
}
public User getUser(){
return user;
}
public void setUser(User user){
this.user =user;
}
}
实体类代码
public class User {
private String name;
private String pwd;
private int age;
private String email;
public String getName(){
return name;
}
public void setName(String name)}
this. name= name
}
public String getPwd(){
return pwd;
}
public void setPwd(String pwd){
this. pwd= pwd;
}
public int getAge()
return age;
}
public void setAge(int age){
this.age =age;
}
注意表单数据和这个是一样的,属性名称变化,比刚刚简单,配置是一样的,几乎没有什么变化。
Struts.xml 配置
Struts xml 配
<package names"user" extends="struts-default">
<action name="register"class="cn. sxt. action. UserAction
method="register">
<result name="success">show.jsps/result>
</action>
<action name="regDriven"
class="cn. sxt. action. UserDrivenAction"method="
register">
<result>name="success">/show. isps/result>
</action>
</package>
实际应用开发中,选择属性应用开发还是模型驱动开发,建议在实体类属性比较多时,采用模型驱动进行开发。