模型驱动 ModelDriven
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模型驱动 ModelDriven相关的知识,希望对你有一定的参考价值。
ModelDriven:模型驱动,对所有action的模型对象进行批处理.
我们在开发中, 在action中一般是用实体对象,然后给实体对象get,set方法。
RegAction{
User user ;
//get/set
}
然后在jsp页面中给action中的user属性绑定值是通过如下方式
<s:textfield name="user.name" />
<s:textfield name="user.age" />
<s:textfield name="user.birthday" />
这样都要加上user.因为在值栈中action进入值栈的时候,值栈中存储的值就是以user.name这种形式存在的,所以ognl搜索值栈的时候,也要按这个名字来搜索。
这样就 比较麻烦,于是就引入了模型驱动。
引入模型驱动后在jsp页面绑定属性值的时候就可以不用加上user. 如:
<s:textfield name="name" />
<s:textfield name="age" />
<s:textfield name="birthday" />
原理是什么:ognl在搜索name值的时候,会把模型驱动user压入栈顶。ognl在值栈扫描的时候,会从上往下找,这样就会搜到user中的name,等等
是模型拦截器把模型压入栈顶的。
<html> <head> <title>reg.jsp</title> </head> <body> <s:actionerror/> <s:form namespace="/md" action="MdAction_reg" method="post" theme="xhtml" validate="true"> <s:textfield name="name" label="UserName" /> <s:textfield name="age" label="UserAge" /> <s:submit /> </s:form> </body> </html>
user类
public class User { private Integer id ; private String name ; private Integer age ; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String toString() { return "User("+id+","+name + ","+ age + ")"; } }
/** * MdAction:某型驱动 */ public class MdAction extends ActionSupport implements ModelDriven<User>,Preparable {private String name; 由于使用了模型驱动,user处于栈顶,user中也有name,那么jsp页面绑定的name是user中name,并不是这里的name,所以该name值为nullprivate User user = new User();
public String reg() { return "success"; } @SkipValidation public String toRegView() { System.out.println("toRegView"); return "regView"; } public User getModel() { return user; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
以上是关于模型驱动 ModelDriven的主要内容,如果未能解决你的问题,请参考以下文章