Jfinal中增加getRecord适应分表功能的表单提交数据获取

项目中用到了分表 没有使用Model 也就不能使用ActiveRecordPlugin 使用Db+Record模式 分表的时候每个用户开户的时候生成一套表结构 比如student5 grade11这种类似。在页面表单中提交的数据不能用getModel得到 所以仿照getModel的写法写了一套getRecord的实现,方便分表的项目用Db+Record的方式 接受表单提交的数据。

import java.util.Map;
import java.util.Map.Entry;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;

import com.jfinal.kit.StrKit;
import com.jfinal.plugin.activerecord.Record;

public class RecordInjector {
    public static  T inject(Class recordClass, HttpServletRequest request, boolean skipConvertError) {
        String recordName = recordClass.getSimpleName();
        return inject(recordClass, StrKit.firstCharToLowerCase(recordName), request, skipConvertError);
    }

    @SuppressWarnings({ "unchecked" })
    public static final  T inject(Class recordClass, String recordName, HttpServletRequest request, boolean skipConvertError) {
        Record record = null;
        try {
            record = (Record) recordClass.newInstance();
        } catch (Exception e) {
        }

        injectRecord(record, recordName, request, recordClass, skipConvertError);

        return (T)record;
    }

    private static final void injectRecord(Record record, String recordName, HttpServletRequest request, Class recordClass, boolean skipConvertError) {
        Map paramMap=request.getParameterMap();
        String start =recordName+".";
        String[] value=null;
        for (Entry param: paramMap.entrySet()) {
            if(!param.getKey().startsWith(start)){
                continue;
            }
            value=param.getValue();
            if (ArrayUtils.isNotEmpty(value)&&StringUtils.isNotBlank(value[0])) {
                if(value.length==1){
                    record.set(StringUtils.removeStart(param.getKey(), start), value[0]);
                }else{
                    record.set(StringUtils.removeStart(param.getKey(), start), value);
                }

            }else{
                record.set(StringUtils.removeStart(param.getKey(), start),null);
            }
        }
    }
}

用法:自己封装一个BaseController 在里面添加getRecord实现

@SuppressWarnings("unchecked")
    public  T getRecord(String recordName) {
        return (T) getRecord(Record.class,recordName);
    }
public  T getRecord(Class recordClass, String recordName) {
        return (T)RecordInjector.inject(recordClass, recordName, this.getRequest(), false);
    }

使用方法

public void saveGrade(){
      Record record=getRecord("grade");
      record.set("pid","pid");
}

你可能感兴趣的:(Jfinal中增加getRecord适应分表功能的表单提交数据获取)