浏览 729 次
|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2008-01-08
问题是这样子的(struts2中):
首先,action用泛型将PoJo传到基类 MyMaintAction extends BaseAction<MyPoJo>{ //someMethod } 再在BaseAction中定义了curObject public abstract class BaseMaintAction<T> extends ActionSupport{ protected T curObject //someMethod //getter setterMethod } 目的就是通过如下URL访问时,能得到MyPoJo类型的一个curObject,从而进行其他操作。 http://localhost/MyPoJo!edit.action?curObject.id=2, 目前的情况是,curObject的确存在了,是Object类型但不是MyPoJo的。所以就去DEBUG源代码, 但是看到OGNL的解析代码时,着实难以下手了,不知道我这么做,行得通否,十分希望能得到一点指点。 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2008-01-08
你可以写一个inteceptor,读取curObject.id这种格式的参数,配合action name (MyPoJo)然后构建出对应的curObject,和ognl没有太多关系。
|
|
| 返回顶楼 | |
|
最后更新时间:2008-01-08
奥,也想到了这个路子。
直接定义protected MyPoJo curObject;能够做到,现在要另写一个的inteceptor,于心不忍呢。 如果在from里面定义了myPojo.otherProperty,就没有简单办法映射到MyPojo了,而这些直接定义protected MyPoJo curObject可以做到。 |
|
| 返回顶楼 | |
|
最后更新时间:2008-01-09
承上,最近写了一个方法:
private void bind() {
String entityString = BeanUtils.getEntityString(getEntityClass());
BeanUtils.forceSetProperty(this, entityString,curObject);
}
entityString:是SomeAction (extends BaseAction extends ActionSupport)中的一个对象的定义。 如果将它放在Action中执行,页面可以通过entityString.property得到值。 如果将它放在Intercept中执行,则得不到,而实际中curObject是有值的。 这两种办法有什么区别呢? Intercept和BaseAction部分代码贴出如下,希望有所指点。 EditEntityInteceptor.java
private static final long serialVersionUID = 1L;
private static final Log logger = LogFactory.getLog(EditEntityInteceptor.class);
@SuppressWarnings("unchecked")
protected String doIntercept(ActionInvocation invocation) throws Exception {
//some code...
String result = invocation.invoke();
if (action instanceof BaseMaintAction) {
Object curObject = BeanUtils.forceGetProperty(action, "curObject");
if(curObject!=null){
BeanUtils.forceSetProperty(action,entityString,curObject);
logger.info("EditEntityInteceptor.doIntercept invoked... ->put curObject by the key: "+entityString+".");
}
}
return result;
}
BaseMaintAction.java,BaseAction 是泛型定义getEntityClass()得到对象类型.entityString取值就是getEntityClass().getSimpleName(),首字母小写。
public String edit() {
if(!StringUtils.isBlank(String.valueOf(curid)))
curObject = (T)getCommonFacade().get(getEntityClass(), getCuridValue());
String entityString = BeanUtils.getEntityString(getEntityClass());
BeanUtils.forceSetProperty(this, entityString,curObject);
return SUCCESS;
}
|
|
| 返回顶楼 | |




