美文网首页
Jfinal中增加getRecord适应分表功能的表单提交数据获

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

作者: 静止_核桃 | 来源:发表于2017-08-15 13:54 被阅读97次

项目中用到了分表 没有使用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> 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> 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<String, String[]> paramMap=request.getParameterMap();
        String start =recordName+".";
        String[] value=null;
        for (Entry<String, String[]> 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> T getRecord(String recordName) {
        return (T) getRecord(Record.class,recordName);
    }
public <T> T getRecord(Class<T> 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适应分表功能的表单提交数据获

    项目中用到了分表 没有使用Model 也就不能使用ActiveRecordPlugin 使用Db+Record模式...

  • 【CRM客户关系管理】22.action功能开发,执行actio

    执行actions功能 form中增加提交函数 修改form中提交执行的操作 使用js来向form增加数据选项 获...

  • JavaScript 通信 / Ajax

    Ajax 表单提交 在HTML中提供了表单提交的功能,我们可以通过表单把数据从前台提交到后台 在HTML的DOM中...

  • Python + Selenium(四)网页元素定位(三)nam

    HTML 中的 name 属性,主要存在与 From 表单中。 表单在网页中主要负责数据采集功能并将数据提交给服务...

  • HTML form表单

    什么是FORM表单: 表单是用来提交资料、意见,规范流程执行过程的格式。表单在网页中主要负责数据采集功能。一个表单...

  • 表单 From

    表单表单是用来提交资料、意见,规范流程执行过程的格式。在网页中主要负责数据采集功能。表单标签:这里面包含了处理表单...

  • form表单

    form表单作用及常用input标签 表单在网页中主要负责数据采集功能。表单也是用来提交资料、意见,规范流程执行过...

  • 表单的设计与使用

    一、表单域的原理 什么是表单 表单在网页中主要负责数据采集功能。表单是人和电脑互相交流的通道,表单和现实世界中的表...

  • html表单

    form表:一切与数据交互有关的action: 提交数据的路径method: 提交方法 get,post 表单控件...

  • Html中form表单的简单用法

    一、form表单有什么作用? 表单的作用: 表单在网页中主要负责数据采集功能,把用户填写的信息提交到网站的后台服务...

网友评论

      本文标题:Jfinal中增加getRecord适应分表功能的表单提交数据获

      本文链接:https://www.haomeiwen.com/subject/gmomrxtx.html