文档章节

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

山东-小木
 山东-小木
发布于 2014/06/03 18:40
字数 395
阅读 1159
收藏 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极速开发实战教程在线观看

© 著作权归作者所有

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

山东-小木

粉丝 223
博文 47
码字总数 29684
作品 1
东营
CEO
私信 提问
加载中

评论(2)

山东-小木
山东-小木

引用来自“JFinal”的评论

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

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

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

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

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

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

木川瓦兹
2013/04/23
0
21
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如何接受表单提交的数据,前提是表单提交的也是JSON格式的数据

@JFinal 你好,想跟你请教个问题:jfinal如何接受表单提交的数据,前提是表单提交的也是JSON格式的数据

清水明月
2013/10/23
543
1

没有更多内容

加载失败,请刷新页面

加载更多

mybatis学习(1)

JDBC连接方式: 1.底层没有使用连接池,操作数据库需要频繁的创建和关闭连接,消耗资源。 2.写原生的JDBC代码在JAVA中,一旦需要修改SQL的话(比如表增加字段),JAVA需要整体重新编译,不利...

杨健-YJ
15分钟前
0
0
怎么组织文档

可以从以下几个方面考虑组织文档: ☐ 各种分支的界面截图和对应的类及文件 ☐ 框架或类图 ☐ 流程图 ☐ 时序图 ☐ 注意事项

-___-
26分钟前
1
0
分布式之数据库和缓存双写一致性方案解析

引言 为什么写这篇文章? 首先,缓存由于其高并发和高性能的特性,已经在项目中被广泛使用。在读取缓存方面,大家没啥疑问,都是按照下图的流程来进行业务操作。 但是在更新缓存方面,对于更...

别打我会飞
28分钟前
5
0
我的oracle11G,12c OCM之路

ocm认证感悟 ---------------------- 距离拿到ocm证书已经过了1年的时间,当初拿到证书的心情到现在还记得。其实在每个DBA心里都有一个成为强者的梦想,需要被认可,我也一样。我干过开发,做...

hnairdb
29分钟前
1
1
手动部署kubernetes集群(1.13.1最新版)

一、机器规划 使用五台机子部署k8s集群,规划如下: master节点3台(同时也是etcd节点) node节点2台 ip分配如下: ip:192.168.10.101,主机名:k8s-etcd01 ip:192.168.10.102,主机名:k8s...

人在艹木中
34分钟前
28
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部