Struts2中OGNL设置泛型属性值的问题
有这么一个封装了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;
}
结果是可以正确的获得值,而不需要经过上面那丑陋的转换。