预期的效果
使用id, 直接设置值
实际无法获取值
为什么:我们可以通过查看CompoundRoot的情况,会发现root顶部存储的是MessageAction对象, 所以直接获取id, title, 是找不到的,需要通过msg对象获取
但是,是哦那个msg.xx 感觉比较繁杂, 如果可以直接使用xx来设置值就好了,那么就是本节所要讲的ModelDriven, 实现ModelDriven接口, 重写getModel()方法
package com.chb.struts2Test.action;
import com.chb.struts2Test.model.Message;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
public class MessageAction extends ActionSupport implements ModelDriven
{
private static final long serialVersionUID = 1L;
//在MessageAction中不在传入所有属性, 使用Message对象封装
private Message msg;
public MessageAction(){
}
public MessageAction(Message msg) {
this.msg = msg;
}
public void setMsg(Message msg) {
this.msg = msg;
}
public Message getMsg() {
return msg;
}
public String addInput() {
return "success";
}
public String add() {
return "success";
}
@Override
public Message getModel() {
if (msg == null) {
msg = new Message();
}
return msg;
}
}
我们在来看CompoundRoot的情况,
我们回发现Message对象在CompoundRoot的顶部, 那么我们就可以直接获取id, 这就是ModelDriven的功能,将Action中的对象添加到CompoundRoot