struts2中的ModelDriven使用
例子都为struts2中的文档例子
JSP提交数据: <s:form action="modelDrivenResult" method="POST" namespace="/modelDriven"> <s:textfield label="Gangster Name" name="name" /> <s:textfield label="Gangster Age" name="age" /> <s:checkbox label="Gangster Busted Before" name="bustedBefore" /> <s:textarea cols="30" rows="5" label="Gangster Description" name="description" /> <s:submit /> </s:form>
根据数据提交的action,和namespace,修改struts.xml的内容
添加下面配置到struts.xml <package name="base2" namespace="/modelDriven" extends="struts-default"> <action name="modelDrivenResult" class="ModelDrivenAction"> <result>/Hello.jsp</result> </action> </package>
然后添加处理数据的action,这里使用ModelDriven的方式。该action继承ModelDriven接口,实现getModel()方法,方法只返回一个模型对象,默认转换Object。只要改模型对象提供的方法和提交数据的name属性对应,struts2就能自动把数据赋给模型对象,最后对象提供各种get方法把数据存放在值栈,传递到Hello.jsp。
处理的action,返回模型对象Gangster。 public class ModelDrivenAction extends ActionSupport implements ModelDriven { public String execute() throws Exception { return SUCCESS; } public Object getModel() { return new Gangster(); } }
模型类 public class Gangster implements Serializable { private String name; private int age; private String description; private boolean bustedBefore; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public boolean isBustedBefore() { return bustedBefore; } public void setBustedBefore(boolean bustedBefore) { this.bustedBefore = bustedBefore; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
最后Hello.jsp中可以使用<s:property value=".."/>取值,value直接使用相应的age,name等。而action虽然提供的getModel()方法,但因为转为了Object,而Object不能提供取值的方法,所以无法使用value="model.xxx"来取值。