文档章节

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

山东-小木
 山东-小木
发布于 2014/06/03 18:40
字数 395
阅读 1184
收藏 29

@jfinal

项目中用到了分表 没有使用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);
	}



JFinal极速开发实战教程在线观看

© 著作权归作者所有

山东-小木

山东-小木

粉丝 241
博文 44
码字总数 27775
作品 2
东营
CEO
私信 提问
加载中

评论(2)

山东-小木
山东-小木 博主

引用来自“JFinal”的评论

感谢分享,顶一个 79
JFinal
JFinal
感谢分享,顶一个 79
Jfinal中增加getRecord适应分表功能的表单提交数据获取

@jfinal 项目中用到了分表 没有使用Model 也就不能使用ActiveRecordPlugin 使用Db+Record模式 分表的时候每个用户开户的时候生成一套表结构 比如student5 grade11这种类似。 在页面表单中提交...

山东-小木
2014/06/03
958
3
JFinal多参数搜索条件自动组装及参数传递

网站中常常会用到搜索功能。单个条件的搜索很好实现,多条件组合搜索时,如何优美地实现参数的组装和传递就成了一个重要的问题。 最近在用JFinal做点小东西,遇到了这个功能需求,经过一番努...

VikingZ
2013/07/12
6.3K
2
JFinal-layui v1.3 发布,极速开发企业应用系统

JFinal-layui 极速开发企业应用管理系统,是以 JFinal+layui 为核心的企业应用项目架构,利用 JFinal 的特性与 layui 完美结合,达到快速启动项目的目的。让开发更简单高效,即使你不会 layu...

琴海森林
04/29
1K
2
OSC上关于Jfinal的提问整理(一)

看见Jfinal很火,就手痒痒了,想学一下,无奈入门较慢,没有找到比较全的文档。于是就经常看讨论区大家的提问与解答。后来就忽然萌生了整理下来的想法。其中的问题如果是@Jfinal 回答的,那我...

木川瓦兹
2013/04/23
7.9K
21
OSC上关于Jfinal的提问整理(二)

1.【问】:Db.tx(new IAtom())事务不起作用? 【jfinal答】:1:如果使用的mysql,确保引擎为 InnoDB 2:这行代码改一下Db.save(c3p0Plugin.getDataSource(), "tbtest", "PKID", record);去掉......

木川瓦兹
2013/04/25
2.5K
2

没有更多内容

加载失败,请刷新页面

加载更多

只需一步,在Spring Boot中统一Restful API返回值格式与统一处理异常

统一返回值 在前后端分离大行其道的今天,有一个统一的返回值格式不仅能使我们的接口看起来更漂亮,而且还可以使前端可以统一处理很多东西,避免很多问题的产生。 比较通用的返回值格式如下:...

晓月寒丶
昨天
59
0
区块链应用到供应链上的好处和实际案例

区块链可以解决供应链中的很多问题,例如记录以及追踪产品。那么使用区块链应用到各产品供应链上到底有什么好处?猎头悬赏平台解优人才网小编给大家做个简单的分享: 使用区块链的最突出的优...

猎头悬赏平台
昨天
28
0
全世界到底有多少软件开发人员?

埃文斯数据公司(Evans Data Corporation) 2019 最新的统计数据(原文)显示,2018 年全球共有 2300 万软件开发人员,预计到 2019 年底这个数字将达到 2640万,到 2023 年达到 2770万。 而来自...

红薯
昨天
65
0
Go 语言基础—— 通道(channel)

通过通信来共享内存(Java是通过共享内存来通信的) 定义 func service() string {time.Sleep(time.Millisecond * 50)return "Done"}func AsyncService() chan string {retCh := mak......

刘一草
昨天
58
0
Apache Flink 零基础入门(一):基础概念解析

Apache Flink 的定义、架构及原理 Apache Flink 是一个分布式大数据处理引擎,可对有限数据流和无限数据流进行有状态或无状态的计算,能够部署在各种集群环境,对各种规模大小的数据进行快速...

Vincent-Duan
昨天
60
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部