2018-11-15 19:18
@JFinal 波总,我发现问题了,是我项目写了个controller层的基类,只要继承该基类,重写父类public的方法,都会出现此错误,把父类的修改为非public的即可解决。我建议重写的方法,您再给路由表映射的时候,只注册一次,不要父类和子类的都进行注册!个人建议!
2017-04-28 18:17
@JFinal 
我们用的db2,我因为在config配置了
ActiveRecordPlugin arp = new ActiveRecordPlugin(druidPlugin);
		arp.setContainerFactory(new PropertyNameContainerFactory());
PropertyNameContainerFactory 类(新增类PropertyNameContainerFactory 驼峰下划线工厂类)代码如下:
package com.cmpl.jxgl.common;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import com.jfinal.plugin.activerecord.IContainerFactory;
 
//XXX  新增类PropertyNameContainerFactory 驼峰下划线工厂类
@SuppressWarnings({ "rawtypes", "unchecked" })
public class PropertyNameContainerFactory implements IContainerFactory {
 
    public Object convert(Object key) {
        if (key instanceof String) {
            String property = null;
            String alias = null;
            if (((String) key).indexOf(".") > -1) {
                String[] properties = ((String) key).split("\\.");
                alias = properties[0];
                property = properties[1];
            } else {
                property = ((String) key);
            }
            StringBuilder buf = new StringBuilder(property);
            for (int i = 1; i < buf.length() - 1; i++) {
                if (Character.isLowerCase(buf.charAt(i - 1)) && Character.isUpperCase(buf.charAt(i))
                        && Character.isLowerCase(buf.charAt(i + 1))) {
                    buf.insert(i++, '_');
                }
            }
            return (alias != null ? alias + "." : "")
                    + (toUpperCase ? buf.toString().toUpperCase() : buf.toString().toLowerCase());
        }
        return key;
    }
 
    private static boolean toUpperCase = true;
 
    public PropertyNameContainerFactory() {
    }
 
    public PropertyNameContainerFactory(boolean toUpperCase) {
        PropertyNameContainerFactory.toUpperCase = toUpperCase;
    }
 
    public Map getAttrsMap() {
        return new PropertyNameMap();
    }
 
    public Map getColumnsMap() {
        return new PropertyNameMap();
    }
 
    public Set getModifyFlagSet() {
        return new PropertyNameSet();
    }
 
    public class PropertyNameSet extends HashSet {
        private static final long serialVersionUID = 2337255096474815584L;
 
        public boolean add(Object e) {
            return super.add(convert(e));
        }
 
        public boolean remove(Object e) {
            return super.remove(convert(e));
        }
 
        public boolean contains(Object e) {
            return super.contains(convert(e));
        }
 
        public boolean addAll(Collection c) {
            boolean modified = false;
            for (Object o : c)
                if (super.add(convert(o)))
                    modified = true;
            return modified;
        }
    }
 
    public class PropertyNameMap extends HashMap {
        private static final long serialVersionUID = -4107018318847768335L;
 
        public Object get(Object key) {
            return super.get(convert(key));
        }
 
        public boolean containsKey(Object key) {
            return super.containsKey(convert(key));
        }
 
        public Object put(Object key, Object value) {
            return super.put(convert(key), value);
        }
 
        public void putAll(Map m) {
            for (Map.Entry e : (Set) (m.entrySet()))
                super.put(convert(e.getKey()), e.getValue());
        }
 
        public Object remove(Object key) {
            return super.remove(convert(key));
        }
    }
}
这样我通过如下方法调用:
	Page page =Db.paginate(1, 10, "select * ", " from hello_word a ");
		renderJson(JFinalJson.getJson().toJson(page));
	
返回的数据如下:
{"totalRow":2,"pageNumber":1,"lastPage":true,"firstPage":true,"totalPage":1,"pageSize":10,"list":[{"NUAN_NUAN":"test","ID":"11111111111111111110","USER_NAME":"张三","USER_PWD":"李四"},{"NUAN_NUAN":"1","ID":"11111111111111111111","USER_NAME":"1","USER_PWD":"111"}]}
因为我们业务表很多,牵扯到数据移植,所以字段名称不能调整。