请教一个struts2赋值方面问题

ttitfly 2008-05-29
1.页面部分
<a href="${ctx}/admin/user!delete.action?id=${id}">删除</a>


确定这个参数id是有值的。

2.Action方法定义关键部分代码如下:
@SuppressWarnings("unchecked")
public abstract class CRUDAction<T> extends ActionSupport implements Preparable, ModelDriven {

	// the model
	protected T entity;

	/**
	 * @see ModelDriven  
	 */
	public T getModel() {
		return entity;
	}

	/**
	 * 每个请求方法执行前都会调用
	 */
	public void prepare() throws Exception {
		if (getId() != null) {
			entity = (T) MethodUtils.invokeMethod(getManager(), "get" , new Object[]{entityClass,getId()});
			if (entity == null)
				throw new IllegalArgumentException("id not exist");
		} else
			entity = entityClass.newInstance();
		onPrepare();
	}

	/**
	 * 删除对象.
	 */
	public String delete() throws Exception {
		getManager().removeById((Long)getId());
		return SUCCESS;
	}

	/**
	 * 从参数中取得id,子类必须实现.
	 */
	protected abstract Object getId();

}



@SuppressWarnings( { "serial", "unchecked" })
public class UserAction extends CRUDAction<User> {

	private Long id;
	
	@Override
	protected Long getId() {
//		String str[] = (String[])ActionContext.getContext().getParameters().get("id");
//		String str1 = (String)ActionContext.getContext().get("id");
		return id;//这里被父类CRUDAction回调时放回的为null,不知道是什么原因
	}

	public void setId(Long id) {
		this.id = id;
	}

	
}

问题:getId()方法返回的id为null,getId()方法里注释的2行代码 ,str[]是有值的,str1是没有值的,也就是说没有自动给id属性赋上值,请问这是为什么呢?多谢
ferreousbox 2008-07-21
使用模型驱动时struts2还自动注入属性么?
congpeixue 2008-09-11
给id属性赋值, 是发生在首次prepare调用之后的。

若如此调用
    public String delete() throws Exception {  
    	prepare();
//        getManager().removeById((Long)getId());  
        return SUCCESS;  
    }  


即会发现
引用
id = 1
getID() = 1
Global site tag (gtag.js) - Google Analytics