二、Model-Driven(模型驱动)Action,Action通过get方法暴露一个模型类,表单字段和模型类的属性对应。 Model-Driven概念与com.opensymphony.xwork.ModelDriven接口没有直接关系的。我们的Action不实现com.opensymphony.xwork.ModelDriven接口也有可能是Model-Driven。 例如:
- User.java
- public class User{
- private String userName;
- private String password;
- private String email;
- ......
- get();/set();方法
- ..........
- }
- RegisterAction.java
- public class RegisterAction implements Action{
- private User user = new User();;
- public String execute(); throws Exception{
- //执行用户注册操作
- }
- public User getUser();{
- return user;
- }
- }
- 页面register.html中会有:
- ......
- <input name="user.userName">
- .......
User.java
public class User{
private String userName;
private String password;
private String email;
......
get();/set();方法
..........
}
RegisterAction.java
public class RegisterAction implements Action{
private User user = new User();;
public String execute(); throws Exception{
//执行用户注册操作
}
public User getUser();{
return user;
}
}
页面register.html中会有:
......
<input name="user.userName">
.......
Model-Driven会通过OGNL的表达式语言来存取数据。例如:在注册时,表达式语言user.userName将会 执行getUser.setUserName()。 那com.opensymphony.xwork.ModelDriven接口又是做什么的呢? 它会将Object getModel()取得的Model放到ValueStack中。可以理解为将这个Model的属性追加到Action中。它主要是作用是实现类似Struts的FormBean功能。 总结:如果将Model-Driven(模型驱动)Action认为是实现com.opensymphony.xwork.ModelDriven接口的观点是错误的,Model-Driven和com.opensymphony.xwork.ModelDriven接口并没有直接的关系。我们在实际应用中一般是将Model-Driven和Field-Driven结合在一起使用,并不需要将这两个概念完全区分开来。
一、Field-Driven(字段驱动)Action,Action拥有自己的属性,这些属性一般是Java的基本类型。表单字段直接和Action的属性 对应。