很久之前写的一篇关于自定表单的文章 http://www.iteye.com/topic/108474 ,按照此方案完成的自定义表单模块已运用于多个系统。
申明:本方案只是初步的解决思路,供大家参考、讨论。
关于自定义表单网上讨论的很多,个人比较偏向于基于Hibernate的解决方式,原因很简单,如果能够将用户自定义的字段信息通过Hibernate的方式存储,那么具备了Hibernate所带来的一切方便,比如:跨数据库等等。
但是有难度:
1、我们通常是先写一个静态的POJO,然后把它的属性映射到数据库表,那么,在字段不确定的情况下,如果把这些不确定的字段映射到数据库呢?当然可以通过cglib或javassist等等字节码工具动态生成class文件。
2、我们知道Hibernate是在服务器启动的时候,根据hbm映射文件创建表,那么在我们启动时候并不知道表信息的时候,如果在运行时,创建表呢?
第一个问题答案:
我们不一定要做POJO到数据库的映射,Hibernate的实体类型也可以是xml文档、Map,也就是说我们可以用户的表单信息做为xml文档或则Map提交给Hibernate处理。
第二个问题答案:
通过分析Hibernate源代码,我们可以在服务器运行中,请求Hibernate动态创建表,代码如下:
从 SessionFactory中拿到配置信息(不要去创建新的实例),增加HBM映射文件到Configuration ,请求Hibernate更新数据库。
Java代码
/**
* @author Li Tonggang
* @email love4ajax@gmail.com
*/
public class CustomAction extends BaseAction{
public String execute() throws MappingException, IOException{
SessionFactoryImplementor sessionFactory = (SessionFactoryImplementor) Service.getService("sessionFactory");
LocalSessionFactoryBean localSessionFactory = (LocalSessionFactoryBean) Service.getService("&sessionFactory");
// 从localSessionFactory拿到配置信息Configuration ,并且增加HBM映射文件到Configuration
Configuration config = localSessionFactory.getConfiguration();
Resource mappingLocation = new ClassPathResource("custom.hbm.xml");
config.addInputStream(mappingLocation.getInputStream());
// 从SessionFactory中拿到属性配置信息
Settings settings = sessionFactory.getSettings();
// 请求 Hibernate 创建表
if ( settings.isAutoUpdateSchema() ) {
new SchemaUpdate( config, settings ).execute( false, true );
}
return super.SUCCESS;
}
}
分享到:
相关推荐
表单输然后自动提交入一定长度的字符然后自动提交 ...表单输入一入一定长度的字符然后自动提交 表单输入一定长度的字符定长度入一定长度的字符然后自动提交 表单输入一定长度的字符的字符然后自动提交
基于FLEX 开发的一款B/S的自定表单系统
- 对于每一个Web表单中,您可以设置默认的填充表单的动作,根据您的需要(“默认操作”,“不要求填写表格”,“不求回报”的填写及提交表格)。 - “批量模式”,填写并提交表格在一个周期为1。 现在,您可以简化...
自己写的超级无敌表单验证,错过后悔,自定义属性,无需写每一个输入框的验证代码
例如很多文本框的name标签都叫username,历史记录中可能保存了很多 username的值,这时如果再遇到name为username的文本框则会直接使用最近保存的一次的值进行填写。通过保存操作用户可以调整控制“默认值”。...
本文没有什么技术上创新,只要会一点Javascript的技术就可以写了。 第一步: 在页面查看源代码,把Form中包含的需要填列的HTML控件找出来如: <form name=”mainfrm” action=”” method=”post”> <input...
自己实现的一个自动创建表单控件,包含控件源码和 示例源码。 用此控件需要为属性TableModel赋值,详细见示例。 根据数据库的数据类型,长度,创建表单(不支持二进制类型)。并可以把数据保存到数据库(添加、...
vb 自动填表 自动表单,vb自动填表,自动填写表单,vb源代码
一个关于JavaScript的表单验证,自己一直在用,很不错
element-ui 的表单可视化编辑器,自动生成表单验证代码。不是一个可视化解决方案,更像是生成模板的工具。为解决笔者记不住 element-ui 表单验证写法而生。
表单Form的应用很广泛,我们可以利用form设计登录注册,也可以设计一种答题问卷的形式,今天主要讲一下form的使用 form表单,将组件内输入的”switch”,”input”,”checkbox”,”slider”,”radio”,”picker”的值...
主要功能是打开任意网页插件会自动判断URL是否是form.php结尾,如果是则按照规则自动填写网页表单,如果不是则略过。你可以根据此代码进行任意改造以满足新的需求。
lotus domino 表单文档相关--打开表单之前的动作postopen
关于struts表单验证,关于struts表单验证,关于struts表单验证,
模拟人工提交网页表单操作,同时监控提交结果变化并报警提示或自动处理报警动作。可广泛用于注册表单、登陆表单、信息添加修改表单提交。 1、支持多任务多操作连续提交,实现无人值守。 2、支持通过多代理服务器访问...
做电子政务、系统OA很多年了,近期公司让我设计一款自定义表单,简单来讲,就是用户可自己定义表单模板,上传系统,就可进行流程审批工作。 这方面网上资料非常少,只讲一个大概,通过一段时间的研究,以及针对致远...
form表单form表单form表单form表单form表单form表单
c++自动填写网络表单程序,MFC程序源码
写了好多表单样式 ,这个表单样式是我比较满意的Form表单样式