Struts2中OGNL设置泛型属性值的问题

分类:Tech | 作者:Shoopman | 发表于2009/07/01 没有评论  

    有这么一个封装了CRUD操作的Action基类:

public abstract class CrudAction extends ActionSupport{

    protected T entity;

    protected PK id;

 

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

    /** 显示新建或编辑页前的数据准备 */

    public String input() throws Exception {

    }

    /** other code */

}

    然后是一个继承此CrudAction的用户CRUD操作类:

public class UserAction extends CrudAction {

    @Autowired
    private UserManager userManager;

 

    @Override
    public String input() throws Exception {

        entity = userManager.get(id);

    }

}

    但是通过类似这样的连接http://localhost:8080/test/user!input.action?id=uid来访问时,在UserAction中得到的id值是一个长度为1的String数组,导致后面Hibernate查询报错了。不知道为什么获得的值是数组,一开始只好以最直接的办法来获取正确的id值:判断id是否为数组,如果是即取索引为0的值。

    后来,尝试在子类用实际的类型覆盖id的setter方法:

    @Override
    public void setId(String id) {
        this.id = id;
    }

结果是可以正确的获得值,而不需要经过上面那丑陋的转换。

Google App Engine 支持 Struts2 的 办法

分类:Tech | 作者:Shoopman | 发表于2009/04/15 没有评论  

如果直接在webapp的classpath加入Struts2的相关jar,Struts2是不能正常工作的。现在安一下办法就可以了:

1.首先写这样一个类:

package com.ociweb.gaestruts2;

// imports

public class InitListener implements ServletContextListener, HttpSessionListener, HttpSessionAttributeListener {

public InitListener()  {
}

public void contextInitialized(ServletContextEvent sce)  {
OgnlRuntime.setSecurityManager(null);
}
// … all other methods stubbed out to do nothing
}

2.在web.xml中加入如下代码:

com.ociweb.gaestruts2.InitListener

我已经验证过了。原文出自Google Group

Tag: