Ext.require([
'Ext.grid.*',
'Ext.data.*',
'Ext.util.*',
'Ext.state.*',
'Ext.form.*'
]);

Ext.onReady(function() {
Ext.QuickTips.init();
Ext.form.Field.prototype.msgTarget = 'side';// 设置控件的错误信息显示位置,主要可选的位置有:qtip,title,under,side,[elementId]

var formPanel = new Ext.form.FormPanel({
height: 555,
width: 845,
autoHeight: true,
border : false,
layout: {
type: 'column'
},
bodyPadding: 10,
items: [{
xtype: 'form',
layout : 'column',
height: 418,
margin: 10,
id:"form",
width: 811,
bodyPadding: 10,
title: 'Form Value Setting',
items: []
}
]
});

//测试从后台传sdto数据至前台”
Ext.define("formPropertyTPList",{
extend:"Ext.data.Model",
fields:[
{name: 'FmPropTpName',type:'string'},
{name: 'SelectValue',
{name: 'RefFormTpId',type:'long'},
{name: 'DataTPSdto.dataTpName',type:'string'}
]
});

Ext.Ajax.request({
url:"createNewForm/createNewForm!viewFormProptpdata.action",
success:function(response,options){
var response = Ext.JSON.decode(response.responseText);
$.each(response,function (i,map) {
for(var k in map){
if(k=="dataTPSdto"){
var arry=map[k];
var fmPropTpName=map.fmPropTpName;
var selectValue = map.selectValue;
if(null != selectValue){
radiovalues = selectValue.split("|");
}
var refFormTpId = map.refFormTpId;
var dataTpName=arry.dataTpName;
tocreate(dataTpName,fmPropTpName,radiovalues,refFormTpId);
}
}
});

function tocreate(tp,tName,refFormTpId){
switch(tp){
case 'bit(1)' :
var radio1 = Ext.create('Ext.form.field.Radio',{
margin: '5 10 5 10',
emptyText: "请输入...",
fieldLabel: tName,
width: 300,
labelWidth: 100,
BoxLabel: radiovalues[0],
inputValue: 'm'
});
var radio2 = Ext.create('Ext.form.field.Radio',
emptyText:"请输入...",
width:300,
BoxLabel : radiovalues[1],
inputValue: 'f'
});
Ext.getCmp('form').add(radio1);
Ext.getCmp('form').add(radio2);
break;
case 'VARCHAR(255)':
var textField = Ext.create('Ext.form.field.Text',
labelWidth: 100
});
Ext.getCmp('form').add(textField);
break;
case'bigint(20)':
var textField = Ext.create('Ext.form.field.Text',
labelWidth: 100
});
Ext.getCmp('form').add(textField);
break;
case'numeric(22,2)':
var textField = Ext.create('Ext.form.field.Text',
labelWidth: 100
});
Ext.getCmp('form').add(textField);
break;
case 'int(11)' :
var textField = Ext.create('Ext.form.field.Text',
labelWidth: 100
});
Ext.getCmp('form').add(textField);
break;
case 'double' :
var textField = Ext.create('Ext.form.field.Text',
labelWidth: 100
});
Ext.getCmp('form').add(textField);
break;
case 'text' :
var textArea = Ext.create('Ext.form.field.TextArea',
labelWidth: 100
});
Ext.getCmp('form').add(textArea);
break;
case 'longtext' :
var textArea = Ext.create('Ext.form.field.TextArea',
labelWidth: 100
});
Ext.getCmp('form').add(textArea);
break;
case 'reference' :
Ext.define("formProperty",{
extend:"Ext.data.Model",
fields : [
{name: 'tNFormPropertyId',type: 'long'},
{name: 'colum0',type: 'string'}
]
});
var countryStore = Ext.create("Ext.data.Store",{
model:"formProperty",
proxy:{
type:"ajax",
url:"createNewForm/createNewForm!accquireCountryData.action?refFormTpId=" + refFormTpId,
reader: {type: 'json',root : "formPropertyList"}
}
});
countryStore.load();
alert(countryStore.colum0);
var comboBox = Ext.create('Ext.form.ComboBox',{
store: countryStore,
valueField : "tNFormPropertyId",// 设置下拉选择框的值
displayField : "colum0",// 设置下拉选择框的显示文本
mode : 'remote',// 数据是在本地
forceSelection : true,// 必须选择一个选项
blankText : 'Country',// 提交form时,该项如果没有选择,则提示错误信息"请选择学历"
emptyText : 'Country',// 在没有选择值时显示为选择学历
hiddenName : 'Country',// 大家要注意的是hiddenName和name属性,name只是下拉列表的名称,作用是可通过,而hiddenName才是提交到后台的input的name。如果没有设置hiddenName,在后台是接收不到数据的,这个大家一定要注意。
editable : false,
triggerAction : 'all',// 因为这个下拉是只能选择的,所以一定要设置属性triggerAction为all,不然当你选择了某个选项后,你的下拉将只会出现匹配选项值文本的选择项,其它选择项是不会再显示了,这样你就不能更改其它选项了。
allowBlank : false,
fieldLabel : tName,
name : 'Country',// 再次提醒,name只是下拉列表的名称
margin: '5 10 5 10',
width:300,
labelWidth: 100
});
Ext.getCmp('form').add(comboBox);
break;
case 'timestamp' :
break;
case 'datetime' :
var selectedDate = Ext.create('Ext.form.DateField',
format : 'Y-m-d',//日期格式
// minDate: new Date(),
labelWidth: 100
});
Ext.getCmp('form').add(selectedDate);
break;
case'date' :
var selectedDate = Ext.create('Ext.form.DateField',//日期格式
width:300,
labelWidth: 100
});
Ext.getCmp('form').add(selectedDate);
break;
case 'include1':
break;
case 'include2' :
break;
case 'include3' :
break;
case 'relationship' :
break;
}
}

// for (var i = 0; i<response.length; i++){
// var fmPropTpName = response[i].fmPropTpName;
// var selectValue = response[i].selectValue;
// if(null != selectValue){
// radiovalues = selectValue.split("|");
// }
// var refFormTpId = response[i].refFormTpId;
// var dataTp = response[i].dataTPSdto.dataTpName;
// alert(refFormTpId);
// /*********textField****start*********/
// var textField = Ext.create('Ext.form.field.Text',{
// margin: '5 10 5 10',
// emptyText:"请输入...",
// fieldLabel: fmPropTpName,
// width:300,
// labelWidth: 100
// });
// /*********textField**** end *********/
// /*********textArea****start*********/
// var textArea = Ext.create('Ext.form.field.TextArea',
// labelWidth: 100
// });
// /*********textArea**** end *********/
// /*********radio****start*********/
// var radio1 = Ext.create('Ext.form.field.Radio',
// labelWidth: 100,
// BoxLabel : radiovalues[0],
// inputValue: 'm'
// });
// var radio2 = Ext.create('Ext.form.field.Radio',
// BoxLabel : radiovalues[1],
// inputValue: 'f'
// });
// /*********radio**** end *********/
// /*********comboBox****start*********/
// Ext.define("Country",{
// extend:"Ext.data.Model",
// fields : [
// {name: 'countryName',type: 'string'},
// {name: 'countryId',type: 'int'}
// ]
// });
// var countryStore = Ext.create("Ext.data.Store",{
// model:"Country",
// idProperty: 'countryId',
// proxy:{
// type:"ajax",
// url:"createNewForm/createNewForm!accquireCountryData.action",
// params:{infoId:refFormTpId},
// reader: {type: 'json',root : "countries"}
// }
// });
// countryStore.load();
// var comboBox = Ext.create('Ext.form.ComboBox',{
// store: countryStore,
// valueField : "countryId",// 设置下拉选择框的值
// displayField : "countryName",// 设置下拉选择框的显示文本
// mode : 'local',// 数据是在本地
// forceSelection : true,// 必须选择一个选项
// blankText : 'Country',// 提交form时,该项如果没有选择,则提示错误信息"请选择学历"
// emptyText : 'Country',// 在没有选择值时显示为选择学历
// hiddenName : 'Country',// 大家要注意的是hiddenName和name属性,name只是下拉列表的名称,作用是可通过,而hiddenName才是提交到后台的input的name。如果没有设置hiddenName,在后台是接收不到数据的,这个大家一定要注意。
// editable : false,
// triggerAction : 'all',// 因为这个下拉是只能选择的,所以一定要设置属性triggerAction为all,不然当你选择了某个选项后,你的下拉将只会出现匹配选项值文本的选择项,其它选择项是不会再显示了,这样你就不能更改其它选项了。
// allowBlank : false,
// fieldLabel : fmPropTpName,
// name : 'Country',// 再次提醒,name只是下拉列表的名称
// margin: '5 10 5 10',
// labelWidth: 100
// });
// /*********comboBox**** end *********/
// /*********selectedDate****start*********/
// var selectedDate = Ext.create('Ext.form.DateField',
// format : 'Y-m-d',//日期格式
//// minDate: new Date(),
// labelWidth: 100
// });
// /*********selectedDate**** end *********/
//
// switch(dataTp){
// case 'bit(1)' :
// Ext.getCmp('form').add(radio1);
// Ext.getCmp('form').add(radio2);break;
//
// case 'VARCHAR(255)' :
// case 'bigint(20)' :
// case 'numeric(22,2)' :
// case 'int(11)' :
// case 'double' :
// Ext.getCmp('form').add(textField);break;
//
// case 'text' :
// case 'longtext' :
// Ext.getCmp('form').add(textArea);break;
//
// case 'reference' :
// Ext.getCmp('form').add(comboBox);break;
//
// case 'timestamp' :
// break;
//
// case 'datetime' :
// Ext.getCmp('form').add(selectedDate);break;
//
// case 'date' :
// Ext.getCmp('form').add(selectedDate);break;
//
// case 'include1' :
// break;
//
// case 'include2' :
// break;
//
// case 'include3' :
// break;
//
// case 'relationship' :
// break;
// }
// }

}
});
formPanel.render(document.body);

});


上面的js代码实现了:先取到formPropertyType中的formPropTpName作为每一个组件对应的fieldLabel;formPropertyType中关联的dataType里的dataTypeName作为要显示的组件类型的判断,区分每一个数据类型,然后定义并加载对应的组件来显示, 完成动态给formPanel add组件radio,combo,text,textArea,DateField等组件;将取到的refFormTpId 作为参数传回去取下拉框里的内容,成功的传回了参数并且在加载comboBox下拉框的时候取到了对应下拉框里的值。


用switch来判断不同类型的数据以便于加载不同组件;后面的注释代码是最开始用if,else组合来判断的。


实现了动态添加Extjs组件,并且显示数据库里的内容。

对应action,Struts,jsp见图片。

图action1

图action2

struts

jsp

Extjs学习心得的更多相关文章

  1. HTML5新增form控件和表单属性实例代码详解

    这篇文章主要介绍了HTML5新增form控件和表单属性实例代码详解,需要的朋友可以参考下

  2. HTML5表单验证特性(知识点小结)

    这篇文章主要介绍了HTML5表单验证特性的一些知识点,本文通过实例代码截图的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. amazeui页面分析之登录页面的示例代码

    这篇文章主要介绍了amazeui页面分析之登录页面的示例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  4. ios – OpenCV构建问题,找不到ext/atomicity.h

    我得到编译器错误抱怨在构建包含OpenCV的项目时.环境是针对iOS的Xcode4.5.它为模拟器编译良好,但在为设备构建时失败.这是错误文本:我正在使用opencv2.framework,使用指令here构建cmake.解决方法默认情况下,XCode4.5使用libc(支持C11的LLVMC标准库)生成要构建的新项目.但OpenCV期望针对GNUlibstd

  5. ios – Swift Eureka Form中的循环

    我正在构建一个Eureka表单,并希望在表单中放置一个循环来构建基于数组的步进器列表.我试图使用的代码是:但是,当我这样做时,我在StepperRow行上出现了一个错误:所以看起来Swift不再认为它在形式之内并且正在关注

  6. swift 上传图片和参数 upload image with params

    Alamofire.upload(urlRequest.0,urlRequest.1).progress{(bytesWritten,totalBytesWritten,totalBytesExpectedToWrite)inprintln("\(totalBytesWritten)/\(totalBytesExpectedToWrite)")}}

  7. swift – 使用PostgreSQL在Vapor 3中上传图片

    我正在关注这些家伙MartinLasek教程,现在我正在“图片上传”.似乎没有人能回答“如何上传iVapor3图像”的问题Db连接正常,所有其他值都保存.这是我的创建方法:和型号:}和叶子模板:我知道需要一种管理文件的方法和原始图像字节,但我怎么去那里?这使用多部分表单的自动解码:upload.leaf文件是:使用File类型可以访问上载文件的本地文件名以及文件数据.如果将其余的Question字段添加到ExampleUpload结构中,则可以使用该路径捕获整个表单的字段.

  8. Android Studio 2.3更新:警告:使用不兼容的插件进行注释处理:android-apt.这可能会导致意外行为

    所以,我已经阅读了本网站上有关此问题的所有问题.我还与其中一位有类似问题的开发人员聊天,他能够解决这个问题.我没有在我的gradle脚本中编写apt或annotationProcessor.我的代码中没有任何地方写过android-apt这个词.我甚至继续检查了所有的库.这包含在我的项目中.这是一个非常大的问题,需要解决.我在下面附加修改后的build.gradle,请建议:解决方法较旧版本的Re

  9. 如何在Picasso库中实现Pinch Zoom?

    我在我目前的项目http://square.github.io/picasso/中使用Picasso库.一切都运行正常,但我无法弄清楚如何为从URL加载的所有图像实现PinchZoom.说实话,我甚至不知道在哪里放置onClickListener.我的应用程序有几个片段,每个片段都有2个选项卡,第一个选项卡有一个ListView,第二个选项卡有一些显示在GridView中的图片:Bmw.javaS

  10. HTML form表单提交方法案例详解

    这篇文章主要介绍了HTML form表单提交方法案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

随机推荐

  1. xe-ajax-mock 前端虚拟服务

    最新版本见Github,点击查看历史版本基于XEAjax扩展的Mock虚拟服务插件;对于前后端分离的开发模式,ajax+mock使前端不再依赖后端接口开发效率更高。CDN使用script方式安装,XEAjaxMock会定义为全局变量生产环境请使用xe-ajax-mock.min.js,更小的压缩版本,可以带来更快的速度体验。

  2. vue 使用 xe-ajax

    安装完成后自动挂载在vue实例this.$ajaxCDN安装使用script方式安装,VXEAjax会定义为全局变量生产环境请使用vxe-ajax.min.js,更小的压缩版本,可以带来更快的速度体验。cdnjs获取最新版本点击浏览已发布的所有npm包源码unpkg获取最新版本点击浏览已发布的所有npm包源码AMD安装require.js安装示例ES6Module安装通过Vue.use()来全局安装示例./Home.vue

  3. AJAX POST数据中文乱码解决

    前端使用encodeURI进行编码后台java.net.URLDecoder进行解码编解码工具

  4. Koa2框架利用CORS完成跨域ajax请求

    实现跨域ajax请求的方式有很多,其中一个是利用CORS,而这个方法关键是在服务器端进行配置。本文仅对能够完成正常跨域ajax响应的,最基本的配置进行说明。这样OPTIONS请求就能够通过了。至此为止,相当于仅仅完成了预检,还没发送真正的请求呢。

  5. form提交时,ajax上传文件并更新到&lt;input&gt;中的value字段

  6. ajax的cache作用

    filePath="+escape;},error:{alert;}});解决方案:1.加cache:false2.url加随机数正常代码:网上高人解读:cache的作用就是第一次请求完毕之后,如果再次去请求,可以直接从缓存里面读取而不是再到服务器端读取。

  7. 浅谈ajax上传文件属性contentType = false

    默认值为contentType="application/x-www-form-urlencoded".在默认情况下,内容编码类型满足大多数情况。在这里,我们主要谈谈contentType=false.在使用ajax上传文件时:在其中先封装了一个formData对象,然后使用post方法将文件传给服务器。说到这,我们发现在JQueryajax()方法中我们使contentType=false,这不是冲突了吗?这就是因为当我们在form标签中设置了enctype=“multipart/form-data”,

  8. 909422229_ajaxFileUpload上传文件

    ajaxFileUpload.js很多同名的,因为做出来一个很容易。我上github搜AjaxFileUpload出来很多类似js。ajaxFileUpload是一个异步上传文件的jQuery插件传一个不知道什么版本的上来,以后不用到处找了。语法:$.ajaxFileUploadoptions参数说明:1、url上传处理程序地址。2,fileElementId需要上传的文件域的ID,即的ID。3,secureuri是否启用安全提交,默认为false。4,dataType服务器返回的数据类型。6,error

  9. AJAX-Cache:一款好用的Ajax缓存插件

    原文链接AJAX-Cache是什么Ajax是前端开发必不可少的数据获取手段,在频繁的异步请求业务中,我们往往需要利用“缓存”提升界面响应速度,减少网络资源占用。AJAX-Cache是一款jQuery缓存插件,可以为$.ajax()方法扩展缓存功能。

  10. jsf – Ajax update/render在已渲染属性的组件上不起作用

    我试图ajax更新一个有条件渲染的组件。我可以确保#{user}实际上是可用的。这是怎么引起的,我该如何解决呢?必须始终在ajax可以重新呈现之前呈现组件。Ajax正在使用JavaScriptdocument.getElementById()来查找需要更新的组件。但是如果JSF没有将组件放在第一位,那么JavaScript找不到要更新的内容。解决方案是简单地引用总是渲染的父组件。

返回
顶部