如果我自己的blogModel继承了Model,但是blogModel定义了部分属性,用于request接收,现在不行

27号 发布于 2012/08/29 10:49
阅读 899
收藏 2

@JFinal 你好,想跟你请教个问题:

如果我自己的blogModel继承了Model,但是blogModel定义了非数据库字段属性(提供了set方法),用于request接收,目的是在controler下做操作,不想单独的定义变量从request中接收,我看了ModelInjector的源代码,发现只能要么继承Model,直接对应数据库字段,要不不继承,全部自己写。

两者不能综合考虑一下吗?

加载中
0
JFinal
JFinal

现在的确不支持这个功能。 目前发现这种需求还比较少,如果实现这个功能对性能也有点影响。如果出现这种需求,建议两种处理方式:

1:在action 中 getPara 并调用 youModel.put(...) 方法放入值

2:使用拦截器注入值到 model 中

    后者适用于多处重用某个model的注入代码。

1
0x0001
0x0001
可以使用put方法增加属性,这样可以不和数据库对应,put方法只修改内容,不修改数据库
0
galaxy58
galaxy58
    @JFinal 有点高深,坐等波波出来解释
0
27号
27号

引用来自“0x0001”的答案

可以使用put方法增加属性,这样可以不和数据库对应,put方法只修改内容,不修改数据库
我问的不是这个意思,我的意思是如何将页面提交过来的参数,直接设置到model中的对应成员变量上。
0
CQRS恶棍
CQRS恶棍

引用来自“JFinal”的答案

现在的确不支持这个功能。 目前发现这种需求还比较少,如果实现这个功能对性能也有点影响。如果出现这种需求,建议两种处理方式:

1:在action 中 getPara 并调用 youModel.put(...) 方法放入值

2:使用拦截器注入值到 model 中

    后者适用于多处重用某个model的注入代码。

这种需求其实很多,model基本是单表操作,如果想做多表查询,那么现在只能 采取上述两种 方法,但我觉得有一种通用的解决办法,就是在多表查询时不利用model接收数据,可以利用Map接收全部页面提交的数据,这样也可以写一个通过的查询方法 ,    public Object pageQuery(int pageNumber, int pageSize, String orderField,
   String orderDirection, Map<String,String> model) {
String sql_select = "select t1.* ,t2.NAME as EMPLOYEE_NAME " ;
StringBuffer sql = new StringBuffer("from t_user t1 left join t_employee t2 on t1.employee_id = t2.employee_id where 1=1 ");
List params = new ArrayList();
if (StringKit.notBlank(model.get("USERNAME"))) {
   sql.append(" and t1.USERNAME like ? ");
   params.add("%" + model.get("USERNAME") + "%");
}

if (StringKit.notBlank(model.get("EMPLOYEE_NAME"))) {
   sql.append(" and t2.name like ? ");
   params.add("%" + model.get("EMPLOYEE_NAME") + "%");
}

if (StringKit.notBlank(model.get("EMPLOYEE_ID"))) {
   sql.append(" and t1.EMPLOYEE_ID like ? ");
   params.add("%" + model.get("EMPLOYEE_ID") + "%");
}

if (StringKit.notBlank(model.get("IS_LOCK"))) {
   sql.append(" and t1.IS_LOCK = ? ");
   params.add(model.get("IS_LOCK"));
}
if(StringKit.notBlank(orderField,orderDirection)){
   //if query by employee name -->t2
   if("EMPLOYEE_NAME".equals(orderField)){
sql.append(" order by ").append(" t2.name ").append(orderDirection);
   }else{
sql.append(" order by ").append(" t1.").append(orderField).append(" ").append(orderDirection);
   }
}

一个model只要这一个方法就可以解决查询的问题,开发方式更加固定
return dao.paginate(pageNumber, pageSize, sql_select, sql.toString(),params.toArray()).setOrderDirection(orderDirection).setOrderField(orderField);
    }
JFinal
JFinal
回复 @27号 : 这篇问答可能对你有用:http://www.oschina.net/question/203191_63261 从页面过来的条件,可以用拦截器处理一下.
JFinal
JFinal
回复 @农夫三拳 : 这篇问答可能对你有用:http://www.oschina.net/question/203191_63261 从页面过来的条件,可以用拦截器处理一下
CQRS恶棍
CQRS恶棍
回复 @27号 : 其实是做业务系统经常 要搞的,所以固定开发人员思路 ,好管理一些,当然开发也要快一些
27号
27号
恩。我们这种应用挺多的。现在是使用spring+jpa(hibernate)实现的
返回顶部
顶部