文档章节

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

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

@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极速开发实战教程在线观看

© 著作权归作者所有

共有 人打赏支持
山东-小木

山东-小木

粉丝 208
博文 42
码字总数 26536
作品 1
东营
CEO
加载中

评论(2)

山东-小木
山东-小木

引用来自“JFinal”的评论

感谢分享,顶一个 79
JFinal
JFinal
感谢分享,顶一个 79
OSC上关于Jfinal的提问整理(一)

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

木川瓦兹
2013/04/23
0
21
JFinal多参数搜索条件自动组装及参数传递

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

VikingZ
2013/07/12
0
2
OSC上关于Jfinal的提问整理(二)

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

木川瓦兹
2013/04/25
0
2
jFinal+AngularJs未来javaEE开发的趋势——程序员的福音

最近有意无意、机缘巧合之下认识了两个新的WEB框架,其中一个是后端框架叫JFinal,看名字就让人觉得为之一振,最后的、最终的,没错它的意思就是“我是JavaEE的终极框架”,没有比这更好的啦...

moz1q1
2014/08/05
0
2
JFinal极速开发实战教程新鲜出炉~

JFinal极速开发实战教程新鲜出炉~ [持续更新中...] JFinal框架让 IT 工程师发挥更大的潜能,实现更大价值,同时也希望 JFinal 工具力量能帮助正在创业的朋友们提升效率、降低成本从而实现创业...

山东-小木
2015/01/07
0
13

没有更多内容

加载失败,请刷新页面

加载更多

Web系统大规模并发:电商秒杀与抢购

一、大规模并发带来的挑战 在过去的工作中,我曾经面对过5w每秒的高并发秒杀功能,在这个过程中,整个Web系统遇到了很多的问题和挑战。如果Web系统不做针对性的优化,会轻而易举地陷入到异常...

xtof
今天
1
0
代码质量管理平台-sonarqube

在工作中,往往开发的时候会不怎么注重代码质量的人很多,存在着很多的漏洞和隐患等问题,sonarqube可以进行代码质量的审核,而且十分的残酷。。。。。接下来我们说下怎么安装 进入官网下载:...

落叶清风
今天
6
0
在Ubuntu安装和配置Sphinx

Ubuntu系统默认是配置有sphinx的,先检查一下,别多此一举。。。。。 在开始本指南之前,您需要: 一个Ubuntu 16.04服务器。 sudo的一个非root用户,您可以通过以下设置本教程 。 安装在服务...

阿锋zxf
今天
1
0
Qt编写输入法V2018超级终结版

对于qt嵌入式linux开发人员来说,输入法一直是个鸡肋问题,要么不支持实体键盘同步,要么不能汉字输入,要么不支持网页输入等,这几年通过陆续接触大量的各种输入法应用场景客户,得到真实需...

飞扬青云
今天
2
0
TypeScript基础入门之高级类型的多态的 this类型

转发 TypeScript基础入门之高级类型的多态的 this类型 高级类型 多态的this类型 多态的this类型表示的是某个包含类或接口的子类型。 这被称做F-bounded多态性。 它能很容易的表现连贯接口间的...

durban
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部