文档章节

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

山东-小木
 山东-小木
发布于 2014/06/03 18:40
字数 395
阅读 1138
收藏 30
点赞 4
评论 2

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

© 著作权归作者所有

共有 人打赏支持
山东-小木
粉丝 197
博文 40
码字总数 24752
作品 0
东营
CEO
加载中

评论(2)

山东-小木
山东-小木

引用来自“JFinal”的评论

感谢分享,顶一个 79
JFinal
JFinal
感谢分享,顶一个 79

暂无相关文章

win10怎么彻底关闭自动更新

win10自带的更新每天都很多,每一次下载都要占用大量网络,而且安装要等得时间也蛮久的。 工具/原料 Win10 方法/步骤 单击左下角开始菜单点击设置图标进入设置界面 在设置窗口中输入“服务”...

阿K1225 ⋅ 今天 ⋅ 0

Elasticsearch 6.3.0 SQL功能使用案例分享

The best elasticsearch highlevel java rest api-----bboss Elasticsearch 6.3.0 官方新推出的SQL检索插件非常不错,本文一个实际案例来介绍其使用方法。 1.代码中的sql检索 @Testpu...

bboss ⋅ 今天 ⋅ 0

informix数据库在linux中的安装以及用java/c/c++访问

一、安装前准备 安装JDK(略) 到IBM官网上下载informix软件:iif.12.10.FC9DE.linux-x86_64.tar放在某个大家都可以访问的目录比如:/mypkg,并解压到该目录下。 我也放到了百度云和天翼云上...

wangxuwei ⋅ 今天 ⋅ 0

PHP语言系统ZBLOG或许无法重现月光博客的闪耀历史[图]

最近在写博客,希望通过自己努力打造一个优秀的教育类主题博客,名动江湖,但是问题来了,现在写博客还有前途吗?面对强大的自媒体站点围剿,还有信心和可能型吗? 至于程序部分,我选择了P...

原创小博客 ⋅ 今天 ⋅ 0

IntelliJ IDEA 2018.1新特性

工欲善其事必先利其器,如果有一款IDE可以让你更高效地专注于开发以及源码阅读,为什么不试一试? 本文转载自:netty技术内幕 3月27日,jetbrains正式发布期待已久的IntelliJ IDEA 2018.1,再...

Romane ⋅ 今天 ⋅ 0

浅谈设计模式之工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻...

佛系程序猿灬 ⋅ 今天 ⋅ 0

Dockerfile基础命令总结

FROM 指定使用的基础base image FROM scratch # 制作base image ,不使用任何基础imageFROM centos # 使用base imageFROM ubuntu:14.04 尽量使用官方的base image,为了安全 LABEL 描述作...

ExtreU ⋅ 昨天 ⋅ 0

存储,对比私有云和公有云的不同

导读 说起公共存储,很难不与后网络公司时代的选择性外包联系起来,但尽管如此,它还是具备着简单和固有的可用性。公共存储的名字听起来也缺乏专有性,很像是把东西直接堆放在那里而不会得到...

问题终结者 ⋅ 昨天 ⋅ 0

C++难点解析之const修饰符

C++难点解析之const修饰符 c++ 相比于其他编程语言,可能是最为难掌握,概念最为复杂的。结合自己平时的C++使用经验,这里将会列举出一些常见的难点并给出相应的解释。 const修饰符 const在c...

jackie8tao ⋅ 昨天 ⋅ 0

聊聊spring cloud netflix的HystrixCommands

序 本文主要研究一下spring cloud netflix的HystrixCommands。 maven <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-clo......

go4it ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部