Extjs 3,jstl根据数据库数据自动构建FormPanel(Extjs系列2)
2012-03-05 15:25
309 查看
1.业务需要动态生成表单,根据表字段生成相应的textfield
2.这里实例是struts实现的,标签语言是jstl.
3.java操作略去,从前端开始
4.思路:
1.直接拼凑form里面的item布局字符串,然后json.decode就行了
2.一行一行的生成控件然后加入进去。重新layout一下
5.代码:
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
这样就可以了,网上找了很多资料,但是很少有跟我需求一样的,其中有个问题很奇怪:
<c:set var="checkArr" value="${checklist}"></c:set>
我这样${checklist[0].xtype}就可以
但是这样:
int j=0;
${checklist[j].xtype}这样就不行 很奇怪,所以最后用的foreach语句。
补充说明一下:
str+= "{layout:'form',columnWidth:.25,items:[{xtype:'${chitem.xtype}',"; str+= "fieldLabel: '${chitem.columnChName}',"; str+= "name: '${chitem.columnName}',"; str+= "anchor:'95%'";
这里就是读取对象属性的,columnName,xtype这些都是我定义对象的属性名称。
extjs刚刚入门写的不好,有用到的希望对你有帮助。
2.这里实例是struts实现的,标签语言是jstl.
3.java操作略去,从前端开始
4.思路:
1.直接拼凑form里面的item布局字符串,然后json.decode就行了
2.一行一行的生成控件然后加入进去。重新layout一下
5.代码:
Ext.onReady(function(){ Ext.QuickTips.init(); <c:set var="interArr" value="${fn:length(checklist)}"></c:set> //jstl标签,取得控件的总个数 <c:set var="checkArr" value="${checklist}"></c:set>//是一个list对象,里面是自定义的table对象,包含表名称、字段名称、字段类型、中文字段名称 var i=${interArr};//获取记录数 //下面代码是实现四列的布局代码,主要是什么时候加入元素结束符,很简单看看就明白了 var n = Math.round(i/4)==0?1:Math.round(i/4); var c = i<4?i:4; var str ="["; var k=0; <c:forEach items="${checkArr}" var="chitem"> if(k%4==0) { str +='{'+ "layout: 'column',"+ "border:false,"+ "items: ["; } str+= "{layout:'form',columnWidth:.25,items:[{xtype:'${chitem.xtype}',"; str+= "fieldLabel: '${chitem.columnChName}',"; str+= "name: '${chitem.columnName}',"; str+= "anchor:'95%'"; str+= "}]}"; if(k!=i-1&&k%4!=3) { str+=","; } if((k%4==3)||(k==i-1)) { str += "]}" if(k!=i-1) str+=","; } k++; </c:forEach> //alert(str); //document.getElementById("te").value= str; str+="]"; var itemsstr = Ext.util.JSON.decode(str); //json的decode转换成控件 //字符串拼凑完毕 //document.getElementById("dd").value=str; // turn on validation errors beside the field globally Ext.form.Field.prototype.msgTarget = 'side'; var fp = new Ext.form.FormPanel({ renderTo: 'docbody', //title : 'Composite Fields', autoHeight: true, //width : 600, frame:true, bodyStyle: 'padding: 5px', layout: 'form', labelWidth:100, autoHeight: true, autoWidth : true, defaults: { anchor: '0' }, items : [ itemsstr ] , buttons: [{ text: '下一步', handler: function(){ //var fp = this.ownerCt.ownerCt, form = fp.getForm(); if (form.isValid()) { } } },{ text: '重置', handler: function(){ fp.getForm().reset(); } }] }); //完成了,下面的代码是实验的代码没有用 fp.doLayout(); //下面是手动创建行的示例,网上找的,我试了试可行,这种方法应该更好,我上面的方法不细心的话容易出错。 var pnRow2=new Ext.Panel({ layout:'column', border:false, items:[ new Ext.Panel({ columnWidth:.5, layout:'form', border:false, labelWidth:40, labelAlign:'right', items:[ { xtype:'datefield', name:'birthday', fieldLabel:'生日', anchor:'95%' } ] }), new Ext.Panel({ columnWidth:.5, layout:'form', border:false, labelWidth:40, labelAlign:'right', items:[ { xtype:'combo', name:'study', store:['专科','本科','硕士','博士'], fieldLabel:'学历', anchor:'95%' } ] }) ] }); //var ddss= new Array //fp.add(pnRow2); //fp.doLayout(); });
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
这样就可以了,网上找了很多资料,但是很少有跟我需求一样的,其中有个问题很奇怪:
<c:set var="checkArr" value="${checklist}"></c:set>
我这样${checklist[0].xtype}就可以
但是这样:
int j=0;
${checklist[j].xtype}这样就不行 很奇怪,所以最后用的foreach语句。
补充说明一下:
str+= "{layout:'form',columnWidth:.25,items:[{xtype:'${chitem.xtype}',"; str+= "fieldLabel: '${chitem.columnChName}',"; str+= "name: '${chitem.columnName}',"; str+= "anchor:'95%'";
这里就是读取对象属性的,columnName,xtype这些都是我定义对象的属性名称。
extjs刚刚入门写的不好,有用到的希望对你有帮助。
相关文章推荐
- ASP.NET基础教程-Web 自定义控件的使用-根据属性值从数据库中提取数据并在页面上自动生成一个表格
- ExtJS4.2 根据数据库记录构建树形菜单
- Extjs 3根据数据库动态生成checkboxgroup(extjs系列1)
- ExtJS4.2 根据数据库记录构建树形菜单
- 提供了根据表中的数据自动生成insert语句的数据库包,还提供了一些简单的工具
- Extjs textarea 实现 数据框根据内容自动扩张
- asp.net中根据数据库中数据自动设置dropdownlist中选中的值
- 根据当月数据库自动生成下个月数据库
- asp.net中根据数据库中数据自动设置dropdownlist中选中的值
- 根据Extjs中grid列表表头自动排序导出数据的实例
- Android官方开发文档Training系列课程中文版:数据存储之数据库存储
- 超长干货:通联数据是如何使用Docker+Rancher构建自动发布管道的?
- 学习struts2建bbs总结一:用powerdesigner建数据库并自动生成测试数据
- 根据中国天气网,自动定位获得当地天气(数据是JSON的)---不过这个接口貌似不更新了
- PHP代码根据数据表结构自动生成数据录入页面
- CM+CDH构建企业大数据平台系列(一)
- 5月16日云栖精选夜读:从0到1构建大数据生态系列1:数据蛮荒中的拓荒之举
- (转载)你好,C++(11)如何用string数据类型表示一串文字?根据初始值自动推断数据类型的auto关键字(C++ 11)
- CM+CDH构建企业大数据平台系列(十一)
- Extjs从grid加载数据到formPanel中combox不显示text