Extjs如何在Window中加入表单及grid

项目需要用到Extjs才接触的哪位知道怎么做吗?求源码~~~~~~~~

2个回答

看下载的压缩包里面的ext-4.1.1a\examples\form这里目录下的form-grid.html示例,然后将里面创建的表单对象作为window对象的元素(设置window对象的items为此form对象)就行

showbo
支付宝加好友偷能量挖 回复qq_30819835: 看示例就行了,官网下载的压缩包都有源代码
接近 4 年之前 回复
qq_30819835
qq_30819835 有源码嘛
接近 4 年之前 回复

只能默默的为你加油。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
EXTJS表单中的data如何从后台获取值,在表单中展示

我是刚入职的初级程序员,公司现在在做的项目是SPRINGMVC+EXTJS。数据库oracle 。 之前一直没学过EXTJS。因为项目快验收了,网上的资料很杂,不得已来求大家帮忙。 ``` doDoubleClick() { //复制一份data用以cancel时使用,jquery数组深拷贝 var oldData = $.map(this.data, function (obj) { return $.extend(true, {}, obj);//返回对象的深拷贝 }); var gridStore = new Ext.create("Ext.data.Store", { reader: new Ext.data.ArrayReader( { idIndex: 'id' }, [ { name: 'ID' }, { name: 'Name' }, { name: 'Value' } ] ), sortInfo: { field: 'ID', direction: 'ASC' }, // fields: ["ID", "Name", "Value"], data: this.data }); var grid = new Ext.create('Ext.grid.Panel', { title: '元件属性列表', store: gridStore, columns: [ { header: 'ID', dataIndex: 'ID' , }, { header: 'Name', dataIndex: 'Name', flex: 1, field: { // xtype: 'textfield', allowBlank: false } }, { header: 'Value', dataIndex: 'Value', field: 'textfield' } ], selType: 'cellmodel', plugins: [ Ext.create('Ext.grid.plugin.CellEditing', { clicksToEdit: 1 }) ], //height: 200, //width: 400, //renderTo: Ext.getBody() }); var win = new Ext.Window({ width: 500, height: 400, closable: true, title: "元件属性编辑器", layout: 'fit',//布局方式 maximizable: true,//显示最大化按钮,点击最大化按钮,窗口自动扩展充满整个浏览器,并且窗口右上角的最大化按钮变为回复原状的按钮 minimizable: true,//显示最小化按钮,并未对这个按钮做任何处理,可以添加监听事件minimizable或重写minimizable()函数 closeAction: 'hide', constrainHeader: true,//设置窗口的顶部不会超出浏览器边界 //constrain:true,//设置整个窗口都不回超出浏览器边界 defaultButton: 0,//默认选中的按钮 resizable: true,//控制窗口是否可以通过拖拽改变大小 resizeHandles: 'se',//控制拖拽方式,必须是在设置了resizable的情况下, modal: true,//弹出窗口后立刻屏蔽掉其他的组件,只有关闭窗口后才能操作其他组件, plain: true,//对窗口内部内容惊醒美化,可以看到整齐的边框 animateTarget: 'target',//可以使窗口展示弹并缩回效果的动画 items: grid, buttons: [ { text: 'Save', type: 'submit', handler: function() { } // win.removeAll(); // win.close(); }, { text: 'Cancel', handler: function () { this.data = oldData win.close(); } } ] }); gridStore.load(); win.show(); return } ``` 上面这个是父类中的双击事件 ``` class OneNodeElement extends Element { constructor(node, pos, core, line, svgLayer, id) { let nodes = new Array(null, null, null); let data = [ { "ID": 1, "Name": "ID", "Value": id }, { "ID": 2, "Name": "Pressure", "Value": "10" }, { "ID": 3, "Name": "Q", "Value": "20000" }, { "ID": 4, "Name": "Temperature", "Value": "60" }, { "ID": 5, "Name": "Reliability", "Value": "95" } ]; nodes[pos] = node; core.setAidGrahpicArg(-11, -13, 26, 26); super(nodes, core, line, svgLayer, id, data); this.node = node; this.pos = pos; } } ``` 上面这个是子类中的写死的data。 **现在我想把DATA中的数据改成从ORACLE数据库中读取应该怎么做**

关于Extjs中使用loadRecord加载选择行至form表单中

handler:function(btn){ var win = new Ext.create("Ext.window.Window", { title: "用户详细信息", modal:true, width: 600, height: 400, items: { xtype: "form", margin: 5, border: false, fieldDefaults: { labelAlign: 'left', labelWidth: 60 }, items:[ {xtype:'textfield',fieldLabel:'账户',name:'userId'}, {xtype:'textfield',fieldLabel:'户名',name:'user'}, {xtype:'textfield',fieldLabel:'开户网点',name:'place'} ] } }); var grid = btn.findParentByType('grid'); var record = grid.getSelectionModel().getSelection(); win.down("form").loadRecord(record); win.show() 点击查看按钮,会弹出form表单,内容是对应的grid选中的内容,可能这段代码写的有问题,可不知道问题出在哪里,控制台报的错是:**Uncaught TypeError: record.getData is not a function**。在线请求指点,多谢大神!

Extjs4表单提交问题????

//------------------添加按钮事件---------------------------------------------- gdgl_add_Item:function(button){ var cmpanel=button.up('globalStatisticsView'); var store = cmpanel.getStore(); var myWindow = Ext.create('Ext.window.Window',{ title:'增加联系人', height: 300, width: 450, id:'add_window', layout: 'form', modal:true, items: { // Let's put an empty grid in just to illustrate fit layout xtype: 'form', border: false, layout: 'anchor', defaults: { anchor: '100%' }, defaultType: 'textfield', items: [{ fieldLabel: '故障时间', name: 'failuretime', xtype: 'datefield', margin:10, allowBlank:false },{ fieldLabel: '故障地点', name: 'failureaddress', margin:10, allowBlank: false },{ fieldLabel: '维修时间', name: 'repairtime', xtype: 'datefield', margin:10, allowBlank: true },{ fieldLabel: '维修人', margin:10, name: 'maintenanceman', allowBlank: true },{ fieldLabel: '完成情况', margin:10, name: 'completion', allowBlank: true },{ fieldLabel: '故障内容', margin:10, name: 'failurecontent', allowBlank: true }], buttons: [ { text: '增加', formBind: true, //only enabled once the form is valid disabled: true, handler: function() { var form = this.up('form').getForm(); var window =this.up('window'); Ext.Ajax.request({ url:'gdgl/addmanagers', headers:{'Content-Type':'application/json;charset=utf-8'}, //params:Ext.JSON.encode(form.getValues()) // Ext.Msg.alert('增加成功',JSON.stringify(myWindow.getValues(),null,2)); params:Ext.JSON.encode(form.getValues()) }); } },{ text: '取消', handler: function() { this.up('window').close(); } }] } }); myWindow.show(); }, 后台代码为SpringMVC,可是每次提交数据库都是空 @RequestMapping("/addmanagers") @ResponseBody public Map<String, Object> addWorkOrders(WorkOrders workOrders){ Map<String, Object> map = new HashMap<String, Object>(); Message message = workOrdersService.addWorkOrders(workOrders); map.put("success",message.isMessageFlag()); map.put("msg", message.getMessageName()+":"+message.getMessageText()); return map; } ----------------------------------------------------------------------- 为什么每次提交数据都是为空呢?我用的ajax请求提交数据有什么问题, 最主要的是我的model模型为什么datefield类型就是提交不上去呢?原来数据库字段类型都是string后来两个改为date类型后,Extjs就提交不上去了,请问是什么原因呢??

Extjs的form表单所有字段设置不可编辑

首先,这段代码在点编辑打开窗口的时候可以把form的所有字段都设置为不可编辑。 ``` var form = getWinForm(grid); form.items.each(function(items) { items.items.each(function(item) { console.log(item); //item.setReadOnly(true); item.readOnly = true; item.fieldStyle = 'background:#E6E6E6'; }); }); var url = '../../buyOrderSummaryInfo/update'; //var tbar=getTbar(form); var win = openWin('采购订单详情', form, panel, url,grid); updateBasic(purchaseRole, form, win, record); ``` 但是当点击窗口的一个button后,调用同样的代码却无效,求助怎么点击窗口的button后依然能把form所有字段设置成不可编辑

EXtjs TriggerField 在表单中关闭后第二次弹出不显示 {急】

//扩展重写TriggerField Ext.form.ShiftDefRefContentTab = Ext.extend(Ext.form.TriggerField, { triggerClass : 'x-form-ref-trigger', fieldLabel : ' 选择节目包标识 ', name : 'contentId', width : 150, initComponent : function() { Ext.form.ComboBox.superclass.initComponent.call(this); this.ds = new Ext.data.Store({// 任务日志的Store proxy : new Ext.data.HttpProxy({ url : "listContentGrid.action" }), reader : new Ext.data.JsonReader({ root : 'root' }, [{ name : "contentTypeTab.typeName" }, { name : 'secOperator.logonName' }, { name : 'metaDefineTab.chupingren' }, { name : 'name' }, { name : 'contentId' }, { name : 'createTime' }, { name : 'contentId' }]) }) this.ButtonOK = new Ext.Button({ id : 'RefButtonOK', text : '添加记录', // iconCls : 'x-icon-subscriptions', tooltip : '添加', // Cls : 'images/business/image_add.png' iconCls : 'images/add.png' }); this.sm = new Ext.grid.CheckboxSelectionModel(); this.cm = new Ext.grid.ColumnModel([this.sm, { header : "包名称", dataIndex : 'name', align : 'center' }, { header : '类型', dataIndex : 'contentTypeTab.typeName', // width : 150, align : 'center' }, { header : '出品人', dataIndex : 'metaDefineTab.chupingren', // width : 150, align : 'center' }, { header : "操作员", id : 'content', dataIndex : 'secOperator.logonName', // width : 150, align : 'center' }]) this.gridMain = new Ext.grid.GridPanel({ store : this.ds, cm : this.cm, sm : this.sm, stripeRows : true, height : 300, width : 500, loadMask : true, bbar : new Ext.PagingToolbar({ pageSize : 20, store : this.ds, displayInfo : true, // displayMsg: 'From {0} to {1} , // total: // {2}', emptyMsg : "No record" }), tbar : new Ext.Toolbar({ items : [this.ButtonOK] }) }); this.windowRef = new Ext.Window({ //layout : 'fit', modal : true, height : 300, width : 500, title : '请选择一列值', //closeAction : 'hide', iconCls : 'images/add.png', // plain : true, items : this.gridMain }); this.ButtonOK.on('click', this.ButtonOK_Click, this, { preventDefault : true }); }, ButtonOK_Click : function() { var selectedItems = this.gridMain.selModel.selections.keys; if (selectedItems.length == 0) { Ext.MessageBox.alert("请选择一条记录"); } else { var selectedRow = this.gridMain.getSelectionModel().getSelected(); this.windowRef.close(); this.setValue(selectedRow.get('contentId')); var text = selectedRow.get('contentId'); Ext.form.ShiftDefRefContentTab.superclass.setValue.call(this, text); } }, onTriggerClick : function() { this.ds.load({ params : { start : 0, limit : 15 } }); this.windowRef.show(); } }); //应用扩展的TriggerField var EsgTab_id = new Ext.form.ShiftDefRefEsgTab(); var ContentTab_id = new Ext.form.ShiftDefRefContentTab(); var EsgTimeSpanTab_id = new Ext.form.ShiftDefRefEsgTimeSpan(); function doAddEsg() { var addSimpleForm = new Ext.FormPanel({ labelWidth : 75, frame : true, title : '节目单', bodyStyle : 'padding:5px 5px 0', width : 500, layoutConfig : { columns : 3, align : 'top' }, defaults : { width : 200 }, defaultType : 'textfield', // items : [{ // xtype : 'textfield', // fieldLabel : '包名称', // name : 'name', // anchor : '75%' // },EsgTimeSpanTab_id], items : [EsgTimeSpanTab_id, EsgTab_id, ContentTab_id], buttons : [{ text : '添加', type : 'submit', handler : function() { addSimpleForm.getForm().doAction('submit', { url : 'doAddEsgRel.action', method : 'post', params : { esgTabId : addSimpleForm.getForm() .findField('esgId').getValue(), contentId : addSimpleForm.getForm() .findField('contentId').getValue(), esgTimespanId : addSimpleForm.getForm() .findField('esgTimespanId').getValue() }, success : function(result) { win.close(); Ext.MessageBox.alert("成功"); esgGrid.store.reload({ callback : function() { esgGrid.getView().refresh(); } }); }, failure : function() { Ext.MessageBox.alert("失败"); } }); } }, { text : '退出', handler : function() { win.close(); } }] }) var win = new Ext.Window({ title : ' 添加 ', height : 150, width : 400, resizable : false, frame : true, autoHeight : true, modal : true, items : [addSimpleForm] }) win.show() } temp.PNG(第一次弹出的form中可以看到的图片 中有TriggerField) temp-1.PNG(第二次点击”退出“ 弹出的form中可以看到的图片 中没有TriggerField在表单中) 请大侠给我看看 非常感谢

表单数据提交完成后grid如何重新加载?

[code="java"] Ext.extend(demo.module, { init: function(){ var myPageSize=20;//grid 每頁顯示條數.常量.可以隨時更改為你需要顯示的條數. var modelCM = new Ext.grid.ColumnModel([ {header:'模塊ID',dataIndex: 'model_id'}, {header:'模塊英文',dataIndex: 'model_en_CN'}, {header:'模塊中文',dataIndex: 'model_zh_CN'}, {header:'模塊路徑',dataIndex: 'model_path'}, {header:'模塊描述',dataIndex: 'model_description'}, {header:'模塊作者',dataIndex: 'model_author'}, {header:'創建日期',dataIndex: 'model_createdate'} ]); modelCM.defaultSortable = false; var modelStore = new Ext.data.Store({ proxy:new Ext.data.HttpProxy({url:"system/model/ModelJsonData.php"}), reader:new Ext.data.JsonReader({ totalProperty:"total", root:"results", id:"model_id"}, [{name:"model_id"}, {name:"model_en_CN"}, {name:"model_zh_CN"}, {name:"model_path"}, {name:"model_description"}, {name:"model_author"}, {name:"model_createdate"}] ), remoteSort: false }); modelStore.setDefaultSort('model_id','desc'); modelStore.load({params:{start:0, limit:myPageSize}}); //查詢字段表單 var searchData=[['productsinfo_number','產品編號'], ['productsinfo_name','產品名稱'], ['productstype_number','種類編號'], ['productstype_name','種類名稱'], ['productuse_user','使用者名稱'], ['productuse_date','使用日期'], ['productuse_ip','使用IP']] var searchStore= new Ext.data.SimpleStore({ fields: ['value','text'], data: searchData }) var searchCombo=new Ext.form.ComboBox({ store:searchStore,emptyText:'請 選 擇',mode: 'local',name:'fields', triggerAction: 'all',valueField: 'value',displayField: 'text',width:100 }); /** * @description 查詢關鍵字 文本輸入框 */ var searchKey=new Ext.form.TextField({name:'keyword',emptyText:'請輸入查詢關鍵字'}); //菜單欄 var modelMenubar = [{ text:'新增模塊',iconCls:'add',tooltip:'新增系統管理模塊', handler:doAdd,scope: this },'-',{ id: 'account-edit-button',text:'修改模塊',tooltip:'编辑所选的模塊', iconCls:'edit',scope: this },'-',{ id: 'account-delete-button',text:'删除模塊',tooltip:'删除当前选中模塊', iconCls:'remove',scope: this },'-','','','','查 询:',searchCombo,searchKey,{iconCls: 'query',scope: this}]; //分頁導航 var modelPagingbar = new Ext.PagingToolbar({ pageSize:myPageSize, store:modelStore, displayInfo: true, emptyMsg: "没有任何数据可以显示", displayMsg: '显示第{0}条到第{1}条数据,总共{2}条数据' }); var modellist=new Ext.grid.GridPanel({ id: 'list-model-panel', title:'系統模塊列表', ds:modelStore, cm: modelCM, viewConfig: {forceFit:true}, tbar: modelMenubar, bbar: modelPagingbar, loadMask: {msg: '正在载入数据...'} }); this.main.add(modellist); this.main.doLayout(); } }); function doAdd(){ var modelEn_CN = new Ext.form.TextField({ fieldLabel: '模塊英文名',allowBlank: false,name: 'txtModelEn_CN',anchor: '90%' }); var modelZh_CN = new Ext.form.TextField({ fieldLabel: '模塊中文名',allowBlank: false,name: 'txtModelZh_CN',anchor: '90%' }); var modelPath = new Ext.form.TextField({ fieldLabel: '模 塊 路 徑',allowBlank: false,name: 'txtModelPath',anchor: '90%' }); var modelDescription = new Ext.form.TextArea({ fieldLabel: '模 塊 描 述',name: 'txtModelDescription',height: 80,anchor: '90%' }); var modelAuthor = new Ext.form.TextField({ fieldLabel: '模 塊 作 者',allowBlank: false,name: 'txtModelAuthor',anchor: '90%' }); var modelCreateDate = new Ext.form.DateField({ fieldLabel: '創 建 日 期',format:'Y-m-d',allowBlank: false,name: 'txtModelCreateDate',emptyText: '請選擇',anchor: '45%' }); //创建表单开始,将表单字段导入表单组件中.确定表单提交地址. var modelForm = new Ext.form.FormPanel({ id: 'modelForm', baseCls: 'x-plain',labelWidth: 120,labelAlign: 'right', url:'system/model/addModel.php', defaultType: 'textfield',labelAlign:'right', items: [modelEn_CN, modelZh_CN,modelPath,modelDescription,modelAuthor,modelCreateDate] }); var win=new Ext.Window({ title: '新增申購系統模塊',width: 550,height:320, layout: 'fit',bodyStyle:'padding:15px;',buttonAlign:'center', items: modelForm, buttons: [{text: '保存并關閉', handler: function() { if (modelForm.getForm().isValid()) { modelForm.getForm().submit({ waitMsg:'请稍候', waitTitle:'正在提交表单数据,请稍候。。。。。。', failure: function(form, action) { if(action.failureType == 'server'){ obj = Ext.util.JSON.decode(action.response.responseText); Ext.Msg.alert('错误信息!', obj.errors.reason); }else{ Ext.Msg.alert('警告信息!', '认证服务器无法访问 : ' + action.response.responseText); } }, success: function() { Ext.Msg.alert('信息', '操作成功!'); win.close(); [color=red]modellist.reload();[/color] //就是这个地方应该怎么写才正确呢?请各位帮忙看看. }, scope: this }); } else{ Ext.MessageBox.alert('错误信息', '请修正错误指出.'); } }, scope: this}, {text: '取消',handler: function(){win.close();},scope: this}] }); win.show(); } [/code] 我的表单数据已经成功添加到数据库,但是我想添加成功后让modellist中的数据重新加载.也就是添加成功后grid马上就刷新显示出来. [b]问题补充:[/b] 我照著你的方法改了,報[color=red]modellist is not defined[/color]這個錯誤,應該不是load的問題....是不是我的那個modellist調用不了呢? [b]问题补充:[/b] 我把 function doAdd()放到里面去了.報:[color=red]uncaught exception: [Exception... "Component returned failure code: 0x80070057 (NS_ERROR_ILLEGAL_VALUE) [nsIXMLHttpRequest.open]" nsresult: "0x80070057 (NS_ERROR_ILLEGAL_VALUE)" location: "JS frame :: http://localhost/purchase/library/ext/adapter/ext/ext-base.js :: anonymous :: line 116" data: no] Line 0[/color]這個錯誤.

这是网上找的extjs3.4的代码(可以运行),需要做哪些更改升级为4.2的,谢谢大神们。学习当中

Ext.onReady(function () { Ext.QuickTips.init(); //HtmlEditor需要这个,不加,编辑时不提示 var sm = new Ext.grid.CheckboxSelectionModel({ handleMouseDown: Ext.emptyFn }); var cm = new Ext.grid.ColumnModel([ new Ext.grid.RowNumberer(), //显示行号 sm, { header: '编号', dataIndex: 'ID', sortable: true }, { header: '姓名', dataIndex: 'Names' }, { header: '时间', dataIndex: 'Date', renderer: Ext.util.Format.dateRenderer('Y-m-d') }, { header: '描述', dataIndex: 'Descn' } ]); //创建数据源 var store = new Ext.data.Store({ proxy: new Ext.data.HttpProxy({ url: '1' }), reader: new Ext.data.JsonReader({ totalProperty: 'totalCount', root: 'roots' }, [ { name: "ID" }, { name: "Names" }, { name: "Date", dateFormat: 'Y-m-d', convert: function (v) { if (v == null) { return null; } var d = new Date(); var str = v.toString(); var str1 = str.replace("/Date(", ""); var str2 = str1.replace(")/", ""); var dd = parseInt(str2); d.setTime(dd); return d; } }, { name: "Descn" } ]) }); //加载数据 store.load({ params: { start: 0, limit: 5 } }); //创建form表单 var frm = new Ext.form.FormPanel({ id: "frmDemo", frame: true, lableWidth: 75, lableAlign: "right", items: [ { xtype: "hidden", id: "types" }, { xtype: "numberfield", fieldLabel: "编号", id: "id", allowNegative: false, allowBlank: false, blankText: "请输入有效的整数" }, { xtype: "textfield", fieldLabel: "姓名", id: "name" }, { xtype: "datefield", fieldLabel: "日期", id: "date", format: "Y-m-d" }, { xtype: "textfield", fieldLabel: "描述", id: "descn" } ] }); //创建窗体 var window = new Ext.Window({ title: '基本信息', width: 400, height: 300, minWidth: 300, minHeight: 200, closeAction: 'hide', modal: true, //弹窗遮层 plain: true, //与背景色保持协调 bodyStyle: 'padding:5px;', buttonAlign: 'center', items: frm, //添加内容 buttons: [ { text: '提交', handler: function () { var types = Ext.getCmp("types").getValue(); var id = Ext.getCmp("id").getValue(); var name = Ext.getCmp("name").getValue(); var date = Ext.getCmp("date").getValue(); var descn = Ext.getCmp("descn").getValue(); if (types == "add") { if (id.lenght < 1 || name.lenght < 1 || date.lenght < 1 || descn.lenght < 1) { Ext.MessageBox.alert("提示", "请填写完整的数据"); return; } Ext.Ajax.request({ url: "3", method: "post", params: { id: id, name: name, date: date, descn: descn }, success: function (response, opts) { if (response.responseText == "false") { Ext.MessageBox.alert("提示", "添加失败"); return; } Ext.MessageBox.alert("提示", "添加成功"); window.hide(); store.reload(); Ext.getCmp("id").setValue(""); Ext.getCmp("name").setValue(""); Ext.getCmp("date").setValue(""); Ext.getCmp("descn").setValue(""); } }); } else if (types == "update") { if (id.lenght < 1 || name.lenght < 1 || date.lenght < 1 || descn.lenght < 1) { Ext.MessageBox.alert("提示", "请填写完整的数据"); return; } Ext.Ajax.request({ url: "2", method: "post", params: { id: id, name: name, date: date, descn: descn }, success: function (response, opts) { if (response.responseText == "false") { Ext.MessageBox.alert("提示", "修改失败"); return; } Ext.MessageBox.alert("提示", "修改成功"); window.hide(); store.reload(); Ext.getCmp("id").setValue(""); Ext.getCmp("name").setValue(""); Ext.getCmp("date").setValue(""); Ext.getCmp("descn").setValue(""); } }); } } }, { text: "重置", handler: function () { Ext.getCmp("id").setValue(""); Ext.getCmp("name").setValue(""); Ext.getCmp("date").setValue(""); Ext.getCmp("descn").setValue(""); } } ] }); //创建显示面板 var grid = new Ext.grid.GridPanel({ autoHeight: true, forceFit: true, //智能分配每列宽度 loadMask: true, //未加载前显示loading... store: store, stripeRows: true, //斑马线 sm: sm, cm: cm, tbar: [ { xtype: "button", text: "添加", handler: function (btnAdd) { Ext.getCmp("types").setValue("add"); Ext.getCmp("id").setValue(""); Ext.getCmp("name").setValue(""); Ext.getCmp("date").setValue(""); Ext.getCmp("descn").setValue(""); window.show(); } }, { xtype: "button", text: "删除", handler: function (btnDel) { var gd = btnDel.ownerCt.ownerCt; var st = gd.getStore(); var data = gd.getSelectionModel().getSelections(); if (data.length == 0) { Ext.MessageBox.alert("提示", "请至少选择一条数据删除"); return; } else { if (confirm('是否删除选中的信息?')) { var ids = ""; for (var i = 0; i < data.length; i++) { ids += data[i].json.ID + ","; } Ext.Ajax.request({ url: "4", params: { ids: ids }, method: "post", success: function (response, opts) { if (response.responseText == "false") { Ext.MessageBox.alert("提示", "删除失败"); return; } Ext.MessageBox.alert("提示", "删除成功"); store.reload(); } }); } } } }, { xtype: "button", text: "修改", handler: function (btnUpdate) { var gd = btnUpdate.ownerCt.ownerCt; var st = gd.getStore(); var data = gd.getSelectionModel().getSelections(); if (data.length != 1) { Ext.MessageBox.alert("提示", "请选择一条信息进行修改"); return; } var emp = data[0]; Ext.getCmp("types").setValue("update"); Ext.getCmp("id").setValue(emp.json.ID); Ext.getCmp("name").setValue(emp.json.Names); Ext.getCmp("date").setValue(emp.json.Date); Ext.getCmp("descn").setValue(emp.json.Descn); window.show(); } } ], bbar: new Ext.PagingToolbar({ pageSize: 5, store: store, displayInfo: true, displayMsg: '显示第{0}条到{1}条记录,一共{2}条', emptyMsg: "没有记录", plugins: new Ext.ux.ProgressBarPager() //分页进度条 }), viewConfig: { columnsText: '显示的列', forceFit: true, sortAscText: '升序', /*调试成可用的*/ sortDescText: '降序' }, autoExpandColumn: 'Descn', collapsible: true, animCollapse: false }); //渲染 grid.render('grid'); });

Extjs 在修改数据的时候,加载不了数据

在线等大神! ---------- /** * 定义权限的左边store */ var permissionStore =Ext.create('Ext.data.ArrayStore', { fields: ['value','text'], proxy: { type: 'ajax', url: path + '/manage/getRoles.do', reader: 'array', actionMethods : { read: 'post' }, }, autoLoad: true, sortInfo: { field: 'value', direction: 'ASC' } }); /** * 自定义一个plane,根据allowBlank显示是否有'*' */ Ext.define('editFormPanel', { extend: 'BasicFormPanel', initComponent: function() { this.on('beforeadd', function(me, field){ if(field.xtype == "fieldset") { for(var key in field.items.items) { if (!field.items.items[key].allowBlank) { field.items.items[key].labelSeparator += required; } } } else { if (!field.allowBlank) { // 处理textfield field.labelSeparator += required; } } }); this.callParent(arguments); } }); /** * 定义编辑用户页面显示模型 */ Ext.define('editUserForm', { extend: 'editFormPanel', url: path + '/manage/saveUser.do', buttonAlign: 'right', reader: { type: 'json', root: 'user' }, defaults: { labelWidth: 120, allowBlank: false }, defaultType: 'textfield', items: [{ xtype:'fieldset', title: '基本信息<span style="color:red">*<span>', defaultType: 'textfield', layout: 'anchor', defaults: { allowBlank: false, anchor: '100%' }, items:[{ fieldLabel: '用户名', name: 'loginName', id: 'userName', blankText: '用户名不能为空', regex:/^[\u4e00-\u9fa5_a-zA-Z0-9_]{5,20}$/, regexText: '用户名需以字母开头,只能为中文,英文字母和数字及_组成(长度5-20位)!', listeners: { blur: function(field){ availableName(field); } } }/*,{ fieldLabel : 'id' , xtype : 'hidden', name : 'user.id', value: 'user.id', id:'id' }*/] },/*{ xtype:'fieldset', title: '扩展信息', defaultType: 'textfield', layout: 'anchor', defaults: { anchor: '100%' }, items:[{ fieldLabel: '固定电话', id: 'fixed', name: 'user.fixedTelephone', value: '', regex: /^(\d{3,4}-)?\d{7,8}$/, regexText: '不是有效的固定电话,固定电话格式为:"XXX-XXXXXXX"或"XXXXXXXX"' },{ fieldLabel: '移动电话', id: 'mobile', name: 'user.mobileTelephone', value: '', regex: /^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$/, regexText: '不是有效的移动电话' },{ fieldLabel: '邮件地址', id: 'email', name: 'user.mail', value: '', vtype: 'email', vtypeText: '不是有效的mail地址' }, { fieldLabel: '描述', id:'description', name: 'user.description', value: '', xtype: 'textareafield' }] }*/,{ xtype:'fieldset', title: '权限', defaultType: 'textfield', layout: 'anchor', defaults: { anchor: '100%' }, items:[{ xtype: 'itemselector', name: 'roleIdStr', id: 'itemselector-field', anchor: '100%', fieldLabel: '用户角色', imagePath: '../ux/images/', store: permissionStore, displayField: 'text', valueField: 'value', value: [], allowBlank: true, msgTarget: 'side', fromTitle: '角色列表', toTitle: '已选择', resetText: 'Reset' }] } ] }); /** * 验证用户名是否符合相应的格式及是否已经存在 */ function availableName(field) { var value = field.value; var result = false; if("" != value && (/^[\u4e00-\u9fa5_a-zA-Z0-9_]{5,20}$/.test(value))) { Ext.Ajax.request({ params:{'user.loginName':value}, method:"POST", async: false, url:path + '/manage/checkNameExists.do', success:function(response){ var responseArray = Ext.JSON.decode(response.responseText); if(responseArray.isExists){ field.markInvalid("该用户名已经被占用!"); } else { result = true; } } }); } else { field.next().validate(); } return result; }; ---------- /** * 在编辑用户表单里面新加保存提交按钮生成编辑用户页面 */ Ext.define('editUser', { extend: 'editUserForm', buttons: [ { text: '保&nbsp;存', handler: function() { // 如果通过验证,手动调用ajax再次验证 var form = this.up('form').getForm(); if(form.isValid()) { var userField = Ext.getCmp('userName'); var result = availableName(userField); if(result) { form.submit({ success: function(form, action) { editUserWindow.close(); // 移除查询条件 searchCondition = {status:'ACTIVE'}; userStore.loadPage(1); }, failure: function(form, actoin) { showDefaultErrorMsg('错误', '数据异常,请确认后重新提交!'); } }); } } } } ] }); ---------- var editForm = Ext.create('editUser'); /** * 编辑用户窗口 */ var editUserWindow = function(){ editUserWindow = Ext.create('Ext.window.Window', { title: '编辑用户', width: 500, height: 480, constrain:true, // 将拖动范围限制在容器内 resizable: false, modal:true, layout: 'fit', items: editForm }); editUserWindow.show(); }; /** * 编辑/查看用户 */ var editUserBtn = Ext.create('Ext.button.Button', { text: '编辑用户', disabled: false, scope: this, iconCls:'edit', handler: function() { var id = selectBox(Ext.getCmp("grid")); if(null != id) { if(id.length > 1) { showDefaultMsg("提示", "只能同时编辑一个用户!"); } else { editForm.form.load({ url:path + '/manage/getUserById.do', params: {id: id}, success : function(form,action) { editUserWindow(); showDefaultMsg("提示", "载入用户信息成功!"); }, failure : function(form,action) { console.log(action); console.log(form); //showDefaultMsg("提示", action.result.info); } }); } } } });

extjs调用百度地图初始化失败,要二次加载

# extjs代码 ``` /* * 报警事项处理窗口 * yening 2015.2.7 * * paras.winTitle:窗口显示的标题 * paras.width:窗口宽度 * paras.height: * */ Ext.ns('Ext.ux.window'); Ext.ux.window.AlarmProcessWnd = function(paras) { var me = this; var xflwdwUrl = "./xflwdwInfo.do?reqCode=queryXflwdwInfoData";// 消防联网单位信息查询URl var xflwdwStaffUrl = "./xflwdwInfo.do?reqCode=queryXflwdwStaffData";// 消防联网单位人员信息查询URl var fireAlarmProcessUrl = "./fireAlarm.do?reqCode=updateAlarmProcessState";// 消防联网单位人员信息查询URl var processState = 0; var eventStore = null; // 初始化参数----------- Ext.applyIf(paras, { width : 1200, height : 460, winTitle : '' }); // 部门信息-------------- var deptStore = new Ext.data.Store({ proxy : new Ext.data.HttpProxy({ url : xflwdwUrl }), reader : new Ext.data.JsonReader({ totalProperty : 'TOTALCOUNT', root : 'ROOT' }, [ { name : 'deptid' }, { name : 'deptname' }, { name : 'address' }, { name : 'remark' } ]) }); deptStore.on("load", function(dStore) { deptPanel.getForm().loadRecord(dStore.getAt(0)); }) var deptPanel = new Ext.form.FormPanel({ id : 'deptPanel', height : 100, // title:'单位信息', // collapsible : true, name : 'deptPanel', defaultType : 'textfield', labelAlign : 'right', labelWidth : 80, frame : true, bodyStyle : 'padding:5 5 0', items : [ { fieldLabel : '单位名称', name : 'deptname', readOnly : true, allowBlank : true, anchor : '99%' }, { fieldLabel : '地址', name : 'address', allowBlank : true, readOnly : true, anchor : '99%' }, { fieldLabel : '说明', name : 'remark', allowBlank : true, readOnly : true, anchor : '99%' } ] }); // ---------------------部门人员信息-------------- var staffStore = new Ext.data.Store({ proxy : new Ext.data.HttpProxy({ url : xflwdwStaffUrl }), reader : new Ext.data.JsonReader({ totalProperty : 'TOTALCOUNT', root : 'ROOT' }, [ { name : 'name' }, { name : 'sex' }, { name : 'type' }, { name : 'phone1' }, { name : 'phone2' } ]) }); var staffCm = new Ext.grid.ColumnModel([ new Ext.grid.RowNumberer(), { header : '姓名', dataIndex : 'name', width : 80 }, { header : '性别', dataIndex : 'sex', width : 40, renderer : SEXRender, sortable : true }, { header : '类型', dataIndex : 'type', width : 100, renderer : XFLWDWSTAFFTYPERender, sortable : true }, { header : '联系电话1', dataIndex : 'phone1', width : 150, sortable : true }, { header : '联系电话2', dataIndex : 'phone2', width : 200, sortable : true } ]); var staffGrid = new Ext.grid.GridPanel({ // title : "联系人", height : 120, // width: 800, autoScroll : true, region : 'center', margins : '3 3 3 3', store : staffStore, loadMask : { msg : '正在加载表格数据,请稍等...' }, stripeRows : true, frame : true, cm : staffCm }); // ----------------------事项处理Panel-------------------- var store = new Ext.data.SimpleStore({ fields : [ 'name', 'code', 'remark' ], data : [ [ '误报模板', '001', '该信息是误报,XXX' ], [ '确认模板', '002', '火情已确认,XXXX' ] ] }); var processMode = new Ext.form.ComboBox({ id : 'id_mode', hiddenName : 'processMode', fieldLabel : '处理模板', triggerAction : 'all', store : store, displayField : 'name', valueField : 'code', mode : 'local', forceSelection : true, typeAhead : true, resizable : true, anchor : '99%', emptyText : '请选择' }); processMode.on("select", function(combo, record) { var txt = Ext.getCmp("processText"); var remark = record.get("remark"); txt.setValue(remark); }); var processForm = new Ext.form.FormPanel({ name : 'processForm', // title : "火警处理", labelWidth : 80, // 标签宽度 frame : true, // frame : true, //是否渲染表单面板背景色 defaultType : 'textfield', // 表单元素默认类型 labelAlign : 'right', // 标签对齐方式 bodyStyle : 'padding:5 5 5 5', // 表单元素和表单面板的边距 items : [ processMode, { id : "processText", fieldLabel : '处理结果', name : 'processText', xtype : 'textarea', height : 80, // 设置多行文本框的高度 emptyText : '请填写处理结果相关内容', // 设置默认初始值 allowBlank : false, anchor : '99%' }, { id : "eventid", name : 'eventid', fieldLabel : '事件id', hidden : true, anchor : '99%' }, { id : "processstate", name : 'processstate', fieldLabel : '事件处理状态', hidden : true, anchor : '99%' } ] }); var eventItemPanel = new Ext.Panel({ layout : 'form', resizable : false, draggable : true, closeAction : 'hide', modal : true, titleCollapse : true, maximizable : false, buttonAlign : 'right', border : false, animCollapse : true, animateTarget : Ext.getBody(), constrain : true, items : [ deptPanel, staffGrid, processForm ], buttons : [ { text : '火警误报', iconCls : 'exclamationIcon', handler : function() { processEventFunction(1); } }, { text : '火警确认', iconCls : 'acceptIcon', handler : function() { processEventFunction(2); } }, { text : '转119', iconCls : 'userIcon', handler : function() { processEventFunction(3); } }, { text : '关闭', iconCls : 'deleteIcon', handler : function() { eventItemWindow.hide(); } } ] }); // -------------------------GIS页面----------------------- var GISPanel = new Ext.Panel( { collapsible : false, margins : '3 3 3 3', html : '<iframe id="gis" name="gis" src="app/fireAlarm/js/GIS.htm" width="100%" height="100%" frameborder=0 scrolling=auto></iframe>' }); // ----------------------------------------------事项处理窗口------------------- // --- var eventItemWindow = new Ext.Window({ title : paras.winTitle, layout : 'column', width : paras.width, height : paras.height, closable : true, // 是否可关闭 closeAction : 'hide', maximizable : true,// 最大化 animateTarget : Ext.getBody(), collapsible : true, // 是否可收缩 border : true, modal : true, resizable : false, draggable : true, titleCollapse : true, animCollapse : true, margins : '3 3 3 3', pageY : 20, pageX : 50, // pageX : document.body.clientWidth / 2 - 420 / 2, constrain : true,// 设置窗口是否可以溢出父容器 items : [ { collapsible : true, columnWidth : .3, AutoHeight:true, region : 'west', autoScroll : true, items : [ eventItemPanel ] }, { region : 'center', columnWidth : .7, items : [ GISPanel ] } ] }); this.getProcessState = function() { return processState; }; /** * 显示窗口 */ this.showWindow = function(grid) { var record = grid.getSelectionModel().getSelected(); eventStore = grid.store; processState = 0; if (Ext.isEmpty(record)) { Ext.MessageBox.alert('提示', '请先选中要查看的事项'); return; } var eventID = record.get("eventid");// 事件ID var deptID = record.get("deptid");// 部门ID var longitudeInfo = record.get("longitude"); var latitudeInfo = record.get("latitude"); deptStore.load({ params : { deptid : deptID } }); staffStore.load({ params : { deptid : deptID } }); processForm.getForm().reset(); eventItemWindow.show(); Ext.getCmp("eventid").setValue(eventID); window.frames['gis'].theLocation(longitudeInfo, latitudeInfo); } /** * 获得经度 * */ function longitude() { for (var i = 0; i < deptStore.getCount(); i++) { var longitudeRecord = deptStore.getAt(i); longitudeInfo = longitudeRecord.get('longitude'); return longitudeInfo; } } /** * 获得纬度 * */ function latitude() { for (var i = 0; i < deptStore.getCount(); i++) { var latitudeRecord = deptStore.getAt(i); latitudeInfo = latitudeRecord.get('latitude'); return latitudeInfo; } } /** * 事件处理 */ function processEventFunction(precessState) { if (!processForm.form.isValid()) { alert("请填写火警处理结果信息。。。。"); return; } update(precessState); } /** * 事件处理 */ function update(precessState) { var cmpProcessState = Ext.getCmp("processstate"); cmpProcessState.setValue(precessState); processForm.form.submit({ url : fireAlarmProcessUrl, waitTitle : '提示', method : 'POST', waitMsg : '正在处理数据,请稍候...', success : function(form, action) { eventItemWindow.hide(); eventStore.reload(); form.reset(); }, failure : function(form, action) { var msg = action.result.msg; Ext.MessageBox.alert('提示', '数据修改失败:<br>' + msg); } }); } } ``` ## 百度地图代码 ``` <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> <style type="text/css"> body, html{width: 100%;height: 100%;margin:0;font-family:"微软雅黑";} #allmap{height:500px;width:100%;} #r-result{width:100%; font-size:14px;} .anchorBL { display: none;} </style> <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=WQOD7GtcqdZaEDDPVBqdqeYj"></script> <title>城市名定位</title> </head> <body> <div id="allmap"></div> </body> </html> <script type="text/javascript"> function initMap(longitudeInfo, latitudeInfo){ // 百度地图API功能 var new_point = new BMap.Point(longitudeInfo, latitudeInfo); var map = new BMap.Map("allmap"); // 创建Map实例 map.centerAndZoom(new_point,14); map.enableScrollWheelZoom(true); //开启鼠标滚轮缩放 var marker = new BMap.Marker(new_point); // 创建标注 map.addOverlay(marker); // 将标注添加到地图中 marker.setAnimation(BMAP_ANIMATION_BOUNCE); //跳动的动画 } var longitude = 116.331398; var latitude = 39.897445; initMap(longitude, latitude); // 用经纬度设置地图中心点 function theLocation(longitude, latitude) { initMap(longitude, latitude); } </script> ```

ext的弹出窗口如何布局?

ext渲染html通过div用viewport很好布局,我现在如何在ext的弹出窗口window里布局那,我在ext window里放了queryform和grid grid的布局一直搞不好,设置grid的height就没有列拉条。设置viewConfig : {forceFit : true}则数据显示不正确 [b]问题补充:[/b] 弹出子窗口,要在弹出一窗口如何扑获click事件 [b]问题补充:[/b] 我把代码贴出来: [code="java"] Ext.onReady(function() { Ext.QuickTips.init(); Ext.form.Field.prototype.msgTarget = 'side'; var inputPageSize = 8; function renderDescn(value, cellmeta, record, rowIndex, columnIndex, store) { var str = "<input type='button' id='update-btn' value='分组电文详细信息' class='x-btn-wrap x-btn' onclick='Info();'/>"; return str; } var cm = new Ext.grid.ColumnModel([new Ext.grid.RowNumberer(), { header : '电文组号', dataIndex : 'DESTINATION', sortable : true }, { header : '电文条数', dataIndex : 'CNT', sortable : true }, { header : '发送时间', dataIndex : 'SENTLOGTIME', sortable : true }, { header : '操作', dataIndex : 'SENTMESSAGEID', renderer : renderDescn }]); /** * 声明数据适配器,将数据源与列模型绑定 */ var MyRecord = Ext.data.Record.create([{ name : 'DESTINATION', mapping : 'DESTINATION' }, { name : 'SENTLOGTIME', mapping : 'SENTLOGTIME' }, { name : 'CNT', mapping : 'CNT' }]) var store = new Ext.data.Store({ proxy : new Ext.data.HttpProxy({ url : '../sentmessagegroup.do?command=list' }), reader : new Ext.data.JsonReader({ totalProperty : 'totalProperty', root : 'root' }, MyRecord) }); /** * 生成Bbar,用于分页显示 */ var bbar = new Ext.PagingToolbar({ pageSize : inputPageSize, store : store, displayInfo : true, displayMsg : '显示第{0}条到{1}条记录,一共{2}条', emptyMsg : '没有记录' }); /** * 声明一个Grid,列表显示信息 */ var grid = new Ext.grid.GridPanel({ el : 'grid', region : 'center', title : '发送分组详细信息', // height : 430, trackMouseOver : false, loadMask : { msg : '正在加载数据,请稍后.....' }, ds : store, cm : cm, sm : new Ext.grid.RowSelectionModel(), bbar : bbar, viewConfig : { forceFit : true } // buttons : [{ // text : '添加电文', // id : 'addbtn', // handler : function() { // addclick(); // } // }] }); window.Info = function() { var PageSize = 8; var selectRecord = grid.getSelectionModel().getSelected(); var data = selectRecord.get("DESTINATION"); //Ext.get("update").on("click", update); function desc(value, cellmeta, record, rowIndex, columnIndex, store) { var str = "<input type='button' id='update' value='详细信息' class='x-btn-wrap x-btn' onclick='update();'/>"; return str; } //Ext.get("update").on("click", update); var infocm = new Ext.grid.ColumnModel([new Ext.grid.RowNumberer(), { header : '序列号', dataIndex : 'SENTMESSAGEID', sortable : true }, { header : '电文插入时间', dataIndex : 'SENTLOGTIME', sortable : true }, { header : '电文号', dataIndex : 'MESSAGEID', sortable : true }, { header : '电文内容', dataIndex : 'BUFFERDATA', sortable : true }, { header : '终点代码', dataIndex : 'DESTINATION', sortable : true }, { header : '长度', dataIndex : 'LENGTH', sortable : true }, { header : '发送结果', dataIndex : 'SENDRESULT', sortable : true }, { header : '成功时间', dataIndex : 'PROCESSLOGTIME', sortable : true }, { header : '重发次数', dataIndex : 'RESENDNUMBER', sortable : true }, { header : '标注', dataIndex : 'MEMO', sortable : true }, { header : '操作', dataIndex : 'SENTMESSAGEID', renderer : desc }]); var infoRecord = Ext.data.Record.create([{ name : 'SENTMESSAGEID', mapping : 'SENTMESSAGEID' }, { name : 'SENTLOGTIME', mapping : 'SENTLOGTIME' }, { name : 'MESSAGEID', mapping : 'MESSAGEID' }, { name : 'BUFFERDATA', mapping : 'BUFFERDATA' }, { name : 'BUFFERCONTENT', mapping : 'BUFFERCONTENT' }, { name : 'DESTINATION', mapping : 'DESTINATION' }, { name : 'LENGTH', mapping : 'LENGTH' }, { name : 'SENDRESULT', mapping : 'SENDRESULT' }, { name : 'PROCESSLOGTIME', mapping : 'PROCESSLOGTIME' }, { name : 'RESENDNUMBER', mapping : 'RESENDNUMBER' }, { name : 'MEMO', mapping : 'MEMO' }]) var infostore = new Ext.data.Store({ proxy : new Ext.data.HttpProxy({ url : '../sentmessagegroup.do?command=grouplist' }), reader : new Ext.data.JsonReader({ totalProperty : 'totalProperty', root : 'root' }, infoRecord) }); infostore.baseParams = { destination : data }; var infobbar = new Ext.PagingToolbar({ pageSize : PageSize, store : infostore, displayInfo : true, displayMsg : '显示第{0}条到{1}条记录,一共{2}条', emptyMsg : '没有记录' }); var infogrid = new Ext.grid.GridPanel({ region : 'center', title : '发送电文详细信息', height : 210, trackMouseOver : false, loadMask : { msg : '正在加载数据,请稍后.....' }, ds : infostore, cm : infocm, sm : new Ext.grid.RowSelectionModel(), bbar : infobbar // viewConfig : { // forceFit : true // } // buttons : [{ // text : '添加电文', // id : 'addbtn', // handler : function() { // addclick(); // } // }] }); function update() { alert("update start"); var infowin; if (!infowin) { var selectRecord = infogrid.getSelectionModel().getSelected(); var infofrom = new Ext.form.FormPanel({ labelAlign : 'top', buttonAlign : 'right', title : '电文详细信息', bodyStyle : 'padding:5px', height : 415, width : 650, frame : true, url : '../sentmessage.do?command=again', items : [{ layout : 'column', border : false, items : [{ columnWidth : .5, layout : 'form', border : false, items : [{ xtype : 'textfield', fieldLabel : '序列号', name : 'SENTMESSAGEID', readOnly : true, style : "background: #B9B9C3;", anchor : '85%' }] }, { columnWidth : .5, layout : 'form', border : false, items : [{ xtype : 'textfield', fieldLabel : '电文插入时间', name : 'SENTLOGTIME', minLength : 1, maxLength : 25, readOnly : true, style : "background: #B9B9C3;", anchor : '85%' }] }] }, { layout : 'column', border : false, items : [{ columnWidth : .5, layout : 'form', border : false, items : [{ xtype : 'textfield', fieldLabel : '电文号', name : 'MESSAGEID', readOnly : true, style : "background: #B9B9C3;", anchor : '85%' }] }, { columnWidth : .5, layout : 'form', border : false, items : [{ xtype : 'textfield', fieldLabel : '发送方主机代号', name : 'DESTINATION', minLength : 0, maxLength : 17, readOnly : true, style : "background: #B9B9C3;", anchor : '85%' }] }] }, { layout : 'column', border : false, items : [{ columnWidth : .5, layout : 'form', border : false, items : [{ xtype : 'textfield', fieldLabel : '长度', name : 'LENGTH', readOnly : true, style : "background: #B9B9C3;", anchor : '85%' }] }, { columnWidth : .5, layout : 'form', border : false, items : [{ xtype : 'textfield', xtype : 'textfield', fieldLabel : '处理标志', name : 'SENDRESULT', minLength : 0, maxLength : 17, // readOnly : true, // disabled:true, anchor : '85%' }] }] }, { layout : 'column', border : false, items : [{ columnWidth : .5, layout : 'form', border : false, items : [{ xtype : 'textfield', fieldLabel : '应用处理时间', name : 'PROCESSLOGTIME', minLength : 1, maxLength : 17, readOnly : true, style : "background: #B9B9C3;", anchor : '85%' }] }, { columnWidth : .5, layout : 'form', border : false, items : [{ xtype : 'textfield', fieldLabel : '重发次数', name : 'RESENDNUMBER', minLength : 1, maxLength : 17, readOnly : true, style : "background: #B9B9C3;", anchor : '85%' }] }] }, { layout : 'column', border : false, items : [{ columnWidth : .93, layout : 'form', border : false, items : [{ xtype : 'textarea', fieldLabel : '电文内容', name : 'BUFFERCONTENT', minLength : 1, maxLength : 5000, anchor : '100%' }] }] }, { layout : 'column', border : false, items : [{ columnWidth : .93, layout : 'form', border : false, items : [{ xtype : 'textarea', fieldLabel : '标注', name : 'MEMO', minLength : 1, maxLength : 500, anchor : '100%' }] }] }], buttons : [{ text : '手动重发', handler : function() { from.getForm().submit({ success : function(form, action) { var json = action.response.responseText; var check = eval("(" + json + ")"); if (check.update == true) { Ext.MessageBox.alert('信息', '更发成功,点击返回列表页面'); grid.render(); } infostore.load({ params : { start : 0, limit : inputPageSize } }); win.close(); }, failure : function(form, action) { var json = action.response.responseText; var check = eval("(" + json + ")"); if (check.check == false) { Ext.MessageBox .alert('错误', '抱歉,该用户权限不够'); } else { Ext.MessageBox.alert('信息', '添加失败,请与管理员联系!'); } } }); } }] } ); infowin = new Ext.Window({ title : 'Window', closable : true, width : 660, height : 435, // border:false, plain : true, draggable : true, collapsible : true, closeAction : 'hide', items : [infofrom] }); } // from.findField("BUFFERDATA").setValue("blob test"); //Ext.get('update-btn').get('update').on("click", update); infowin.show(Ext.get('update')); /** * form加载事件 */ // from.form.findField("BUFFERDATA").setValue(blob.bufferdata); infofrom.getForm().loadRecord(selectRecord); // from.form.findField("BUFFERDATA").setValue(blob.bufferdata); }; var queryform = new Ext.FormPanel({ labelAlign : 'left', region : 'north', title : '电文查询', buttonAlign : 'right', bodyStyle : 'padding:5px', // width : 300, height : 150, frame : true, labelWidth : 80, viewConfig : { forceFit : true }, items : [{ layout : 'column', border : false, items : [{ columnWidth : .5, layout : 'form', border : false, items : [{ // 用户编号 xtype : 'textfield', fieldLabel : '电文号', name : 'messageid', anchor : '85%' }, { // 用户编号 xtype : 'datefield', fieldLabel : '开始时间', name : 'startdate', format : 'Y-m-d', anchor : '85%' } ] }, { columnWidth : .5, layout : 'form', border : false, items : [{ // 用户名 xtype : 'textfield', fieldLabel : '发送结果', name : 'sendresult', anchor : '85%' }, { // 用户名 xtype : 'datefield', fieldLabel : '结束时间', name : 'enddate', format : 'Y-m-d', anchor : '85%' }] }] }], buttons : [ { text : '查询', handler : function() { var messageid = queryform.form.findField("messageid") .getValue(); // alert("messageid:"+messageid); var sendresult = queryform.form.findField("sendresult") .getValue(); // alert("destination:"+destination); var start = queryform.form.findField("startdate") .getValue(); var startdate; // alert("start:"+start); if (start != null && start != "") { startdate = start.format("Y-m-d"); } // alert("startdate:"+startdate); var end = queryform.form.findField("enddate").getValue(); var enddate; // alert("end:"+end); if (end != null && end != "") { enddate = end.format("Y-m-d"); } // alert("enddate:"+enddate); infostore.baseParams = { messageid : messageid, // destination : data, startdate : startdate, sendresult : sendresult, enddate : enddate }; infostore.reload({ params : { start : 0, limit : inputPageSize } }); } }, { text : '重置', handler : function() { queryform.form.reset(); } }] }) var win = new Ext.Window({ title : 'infoWindow', closable : true, width : 660, height : 500, // border:false, plain : true, draggable : true, collapsible : true, closeAction : 'hide', layout : 'border', items : [queryform, infogrid] }) // infogrid.render(); infostore.load({ params : { start : 0, limit : PageSize } }) // infogrid.render(); win.show(Ext.get('update-btn')); } // =================================表单提交======================================== /** * 为Grid的添加按钮编写单击事件 */ function addclick() { var win; if (!win) { var from = new Ext.form.FormPanel({ labelAlign : 'top', buttonAlign : 'right', title : '添加发送电文信息', bodyStyle : 'padding:5px', height : 275, width : 650, frame : true, autoScroll : true, url : '../sentmessage.do?command=add', items : [{ layout : 'column', border : false, items : [{ columnWidth : .5, layout : 'form', border : false, items : [{ xtype : 'textfield', fieldLabel : '序列号', name : 'MAPPINGMESSAGEID', anchor : '85%' }, { xtype : 'textfield', fieldLabel : '电文号', name : 'MESSAGEID', anchor : '85%' }, { xtype : 'textfield', fieldLabel : '长度', name : 'LENGTH', anchor : '85%' }, { xtype : 'textfield', fieldLabel : '重发次数', name : 'RESENDNUMBER', minLength : 1, maxLength : 17, anchor : '85%' }] }, { columnWidth : .5, layout : 'form', border : false, items : [{ xtype : 'textfield', fieldLabel : '电文方向', name : 'DIRECTION', minLength : 1, maxLength : 17, anchor : '85%' }, { xtype : 'textfield', fieldLabel : '主机号', name : 'HOSTDC', minLength : 0, maxLength : 17, anchor : '85%' }, { xtype : 'textfield', fieldLabel : '电文组号', name : 'MESSAGEGROUPID', minLength : 0, maxLength : 17, anchor : '85%' }] }] }], buttons : [{ text : '提交', handler : function() { if (from.form.isValid()) { from.getForm().submit({ success : function() { Ext.MessageBox.alert('信息', '添加成功,点击返回列表页面'); grid.render(); store.load({ params : { start : 0, limit : inputPageSize } }); win.close(); }, failure : function() { Ext.MessageBox.alert('信息', '添加失败,请与管理员联系!'); } }); } } }, { text : '重置', handler : function() { from.getForm().reset(); } }] }); /** * 声明一个window,包装FormPanel */ win = new Ext.Window({ title : 'InfoWindow', closable : true, width : 660, height : 300, // border:false, plain : true, draggable : true, collapsible : true, closeAction : 'hide', items : [from] }); } win.show(Ext.get('addbtn')); }; window.delInfo = function() { var sm = grid.getSelectionModel(); var count = sm.getCount(); if (count == 0) { Ext.MessageBox.alert('信息', '您没有勾选任何记录!'); } else { Ext.MessageBox.confirm('Message', '确定要删除?', function(btn) { if (btn == 'yes') { var record = sm.getSelected(); var str = record.get('MAPPINGMESSAGEID'); Ext.Ajax.request({ url : '../sentmessage.do?command=delete', params : { MAPPINGMESSAGEID : str }, success : function() { Ext.MessageBox.alert('信息', '删除成功'); store.reload(); }, failure : function() { Ext.MessageBox.alert('错误', '请与后台服务人员联系'); }, timeout : 30000, headers : { 'my-header' : 'foo' } }); } }); } }; window.updateInfo = function() { alert("parent upadateinfo"); var win; if (!win) { var selectRecode = grid.getSelectionModel().getSelected(); var from = new Ext.form.FormPanel({ labelAlign : 'top', buttonAlign : 'right', title : '电文详细信息', bodyStyle : 'padding:5px', height : 415, width : 650, frame : true, url : '../sentmessage.do?command=again', items : [{ layout : 'column', border : false, items : [{ columnWidth : .5, layout : 'form', border : false, items : [{ xtype : 'textfield', fieldLabel : '序列号', name : 'SENTMESSAGEID', readOnly : true, style : "background: #B9B9C3;", anchor : '85%' }] }, { columnWidth : .5, layout : 'form', border : false, items : [{ xtype : 'textfield', fieldLabel : '电文插入时间', name : 'SENTLOGTIME', minLength : 1, maxLength : 25, readOnly : true, style : "background: #B9B9C3;", anchor : '85%' }] }] }, { layout : 'column', border : false, items : [{ columnWidth : .5, layout : 'form', border : false, items : [{ xtype : 'textfield', fieldLabel : '电文号', name : 'MESSAGEID', readOnly : true, style : "background: #B9B9C3;", anchor : '85%' }] }, { columnWidth : .5, layout : 'form', border : false, items : [{ xtype : 'textfield', fieldLabel : '发送方主机代号', name : 'DESTINATION', minLength : 0, maxLength : 17, readOnly : true, style : "background: #B9B9C3;", anchor : '85%' }] }] }, { layout : 'column', border : false, items : [{ columnWidth : .5, layout : 'form', border : false, items : [{ xtype : 'textfield', fieldLabel : '长度', name : 'LENGTH', readOnly : true, style : "background: #B9B9C3;", anchor : '85%' }] }, { columnWidth : .5, layout : 'form', border : false, items : [{ xtype : 'textfield', xtype : 'textfield', fieldLabel : '处理标志', name : 'SENDRESULT', minLength : 0, maxLength : 17, // readOnly : true, // disabled:true, anchor : '85%' }] }] }, { layout : 'column', border : false, items : [{ columnWidth : .5, layout : 'form', border : false, items : [{ xtype : 'textfield', fieldLabel : '应用处理时间', name : 'PROCESSLOGTIME', minLength : 1, maxLength : 17, readOnly : true, style : "background: #B9B9C3;", anchor : '85%' }] }, { columnWidth : .5, layout : 'form', border : false, items : [{ xtype : 'textfield', fieldLabel : '重发次数', name : 'RESENDNUMBER', minLength : 1, maxLength : 17, readOnly : true, style : "background: #B9B9C3;", anchor : '85%' }] }] }, { layout : 'column', border : false, items : [{ columnWidth : .93, layout : 'form', border : false, items : [{ xtype : 'textarea', fieldLabel : '电文内容', name : 'BUFFERCONTENT', minLength : 1, maxLength : 5000, anchor : '100%' }] }] }, { layout : 'column', border : false, items : [{ columnWidth : .93, layout : 'form', border : false, items : [{ xtype : 'textarea', fieldLabel : '标注', name : 'MEMO', minLength : 1, maxLength : 500, anchor : '100%' }] }] }], buttons : [{ text : '手动重发', handler : function() { from.getForm().submit({ success : function(form, action) { var json = action.response.responseText; var check = eval("(" + json + ")"); if (check.update == true) { Ext.MessageBox.alert('信息', '更发成功,点击返回列表页面'); grid.render(); } store.load({ params : { start : 0, limit : inputPageSize } }); win.close(); }, failure : function(form, action) { var json = action.response.responseText; var check = eval("(" + json + ")"); if (check.check == false) { Ext.MessageBox.alert('错误', '抱歉,该用户权限不够'); } else { Ext.MessageBox.alert('信息', '添加失败,请与管理员联系!'); } } }); } }] } ); win = new Ext.Window({ title : 'Window', closable : true, width : 660, height : 435, // border:false, plain : true, draggable : true, collapsible : true, closeAction : 'hide', items : [from] }); } // from.findField("BUFFERDATA").setValue("blob test"); win.show(Ext.get('update-btn')); /** * form加载事件 */ // from.form.findField("BUFFERDATA").setValue(blob.bufferdata); from.getForm().loadRecord(selectRecode); // from.form.findField("BUFFERDATA").setValue(blob.bufferdata); }; // =================================渲染呈现======================================== /** * 渲染呈现Grid,Store初始化 */ var queryform = new Ext.FormPanel({ labelAlign : 'left', region : 'north', title : '电文查询', buttonAlign : 'right', bodyStyle : 'padding:5px', width : 300, height : 150, frame : true, labelWidth : 80, items : [{ layout : 'column', border : false, items : [{ columnWidth : .5, layout : 'form', border : false, items : [{ // 用户编号 xtype : 'textfield', fieldLabel : '电文号', name : 'messageid', anchor : '85%' }, { // 用户编号 xtype : 'datefield', fieldLabel : '开始时间', name : 'startdate', format : 'Y-m-d', anchor : '85%' } ] }, { columnWidth : .5, layout : 'form', border : false, items : [{ // 用户名 xtype : 'textfield', fieldLabel : '终点代码', name : 'destination', anchor : '85%' }, { // 用户名 xtype : 'datefield', fieldLabel : '结束时间', name : 'enddate', format : 'Y-m-d', anchor : '85%' }] }] }], buttons : [ { text : '查询', handler : function() { var messageid = queryform.form.findField("messageid") .getValue(); // alert("messageid:"+messageid); var destination = queryform.form.findField("destination") .getValue(); // alert("destination:"+destination); var start = queryform.form.findField("startdate").getValue(); var startdate; // alert("start:"+start); if (start != null && start != "") { startdate = start.format("Y-m-d"); } // alert("startdate:"+startdate); var end = queryform.form.findField("enddate").getValue(); var enddate; // alert("end:"+end); if (end != null && end != "") { enddate = end.format("Y-m-d"); } // alert("enddate:"+enddate); store.baseParams = { messageid : messageid, destination : destination, startdate : startdate, enddate : enddate }; store.reload({ params : { start : 0, limit : inputPageSize } }); } }, { text : '重置', handler : function() { queryform.form.reset(); } }] }) var viewport = new Ext.Viewport({ layout : 'border', items : [queryform, grid] }) grid.render(); store.load({ params : { start : 0, limit : inputPageSize } }); }) Ext.override(Ext.menu.DateMenu, { render : function() { Ext.menu.DateMenu.superclass.render.call(this); if (Ext.isGecko) { this.picker.el.dom.childNodes[0].style.width = '178px'; this.picker.el.dom.style.width = '178px'; } } }); [/code] 点击主页面的分组详细信息,跳出一个子窗口,显示该组的详细纪录分页及查询,我现在想要的是在点击子窗口的的详细信息在跳出一个窗口,显示该条纪录的详细信息 [b]问题补充:[/b] to yourgame:我截图贴上来你就明白了,图1是主窗口点击上面的分组电文详细信息,就跳出图2子窗口,我现在就想点击图2的详细信息在跳出一个子窗口图3。图2是渲染到图1的一个div块的id,图2在跳出一个窗口3就没有可渲染的地方,因为图2是一个ext window不包含任何html,我的问题就在这里。 [b]问题补充:[/b] to yourgame:你还是没理解我要啥,你这只实现我做的工作,我的意思主页面跳出一个ext window,点击这个ext window上的grid在跳出一个ext window [b]问题补充:[/b] to yourname:子窗口可以跳出,但是值代不出来,第3个窗口的列信息和主窗口是不一样的

用后台JSON填充EXT FormPanel 无数据显示

我再TABPANEL上建了grid,在选择grid上的一条数据后点击“修改”按钮,弹出个window内嵌套了FormPanel 并用后台传来的JSON数据填充该FORM。页面倒是弹出来了,后台传来的JSON也正常啊,但怎么就是数据填充不上去啊。。。有谁来帮我看看什么问题吗~?代码如下 [code="java"] var but = this; but.setDisabled(true); var gridPanel = Ext.getCmp(n.id); var gsm = gridPanel.getSelectionModel(); var row = gsm.getSelections(); if (row.length > 0 && row.length <= 1) { var selectRowId = row[0].get("userId"); if (!Ext.getCmp(n.id + 'edit-user-win')) { // 判断是否已经存在该窗口 n.id是树节点的ID // alert(selectRowId); new Ext.Window({ id : n.id + 'edit-user-win', // 设置ID iconCls : 'option', title : '修改用户', collapsible : true, width : 400, height : 320, plain : true, resizable : false, // 不能调整大小 items : new Ext.form.FormPanel({ id : n.id + 'edit-user-form', layoutConfig : { labelSeparator : ":" }, labelWidth : 80, labelAlign : "right", layout : "form", headerAsText : false, animCollapse : true, autoScroll : false, buttonAlign : "right", hideBorders : false, disabledClass : 'color:black', frame : true, border : false, reader : new Ext.data.JsonReader({ successProperty : 'success', root : 'user', id : 'userId' }, new Ext.data.Record.create([{ name : 'users.userId', mapping : 'userId', type : 'string' }, { name : 'users.userName', mapping : 'userName', type : 'string' }, { name : 'users.trueName', mapping : 'trueName', type : 'string' }, { name : 'users.tel', mapping : 'tel', type : 'string' }, { name : 'users.mobile', mapping : 'mobile', type : 'string' }, { name : 'users.email', mapping : 'email', type : 'string' }, { name : 'users.address', mapping : 'address', type : 'string' }, { name : 'users.sex', mapping : 'sex', type : 'string' }])), bodyStyle : 'padding:5px', defaults : { width : 100 }, items : [{ xtype : 'hidden', id : 'edit-userId', name : 'users.userId' }, { xtype : "textfield", id : 'edit-userName', name : 'users.userName', fieldLabel : "用户名", anchor : "100%", disabled : true, anchor : '95%' }, { xtype : "textfield", id : 'edit-trueName', name : 'users.trueName', fieldLabel : "姓名", anchor : "100%", emptyText : "请输入您的真实姓名", maxLength : 20, maxLengthText : "姓名输入过长,必须在20个字符以内", allowBlank : false, blankText : "姓名为必填字段", anchor : '95%' }, { xtype : "combo", id : 'edit-sex', name : 'users.sex', triggerAction : "all", fieldLabel : "性别", anchor : "100%", readOnly : true, store : new Ext.data.SimpleStore({ fields : ["value", "name"], data : [['男', '男'], ['女', '女']] }), displayField : 'name', valueField : 'value', mode : 'local', // lazyRender : true, // typeAhead : true, // triggerAction : 'all', // forceSelection : true, anchor : '95%' }, { xtype : "textfield", id : 'edit-tel', name : 'users.tel', fieldLabel : "电话号码", anchor : "100%", maxLengthText : "电话号码过长", maxLength : 15, emptyText : "", regex : /^[0-9]+$/, regexText : '输入必须为数字', anchor : '95%' }, { xtype : "textfield", id : 'edit-mobile', name : 'users.mobile', fieldLabel : "手机号码", anchor : "100%", maxLengthText : "手机号码过长", maxLength : 15, regex : /^[0-9]+$/, regexText : '输入必须为数字', anchor : '95%' }, { xtype : "textfield", id : 'edit-email', name : 'users.email', fieldLabel : "电子邮件", anchor : "100%", vtype : "email", vtypeText : "电子邮件格式不正确", maxLengthText : "电子邮件过长", maxLength : 100, anchor : '95%' }, { xtype : "textarea", id : 'edit-address', name : 'users.address', fieldLabel : "地址", maxLength : 200, maxLengthText : "地址过长,必须在200个字符以内", anchor : '95%' }], buttons : [{ text : '确定', type : 'submit', handler : function() { } }] }) }).show(); Ext.getCmp(n.id + 'edit-user-form').form.load({ url : 'findUser', params : { 'users.userId' : selectRowId } }); } else { Ext.getCmp(n.id + 'edit-user-win').setActive(true); } Ext.getCmp(n.id + 'edit-user-win').on('close', function() { but.setDisabled(false);// grid面板上修改按钮 }); } else { Ext.Msg.show({ title : '操作提示', msg : '请确认是否选中一条需要操作的信息!', buttons : Ext.Msg.OK, icon : Ext.Msg.INFO }); but.setDisabled(false); } [/code] 后台传来的JSON也正常啊 如下: [code="json"] {"success":true,"user":{"address":null,"createDate":null,"email":null,"flag":null,"mobile":null,"sex":null,"tel":null,"trueName":"123123","updateDate":null,"userId":"20100902000000000047","userName":"123123","userPwd":null}} [/code] 下图是firebug控制台的东西。。。得到的JSON数据 [img]http://dl.iteye.com/upload/attachment/302656/a96e3f08-046a-34cb-bece-30f42f2e68e0.jpg[/img]

最近遇到一个Ext.Ajax.request的奇怪问题

最近在学Extjs,照着视频做了一个提交数据并且添加store的demo,却遇到一个奇怪的问题:添加第一次的时候没有问题,添加第二次的时候就向服务器发了2次请求,添加第3次的时候就向服务器发了3次请求,导致了,第二次添加了2个相同的,第三次添加了3个相同的,请大家帮我看下是哪有写得有问题 [code="js"] Ext.QuickTips.init(); Ext.form.Field.prototype.msgTarget = "side"; PersonViewFormPanel = Ext.extend(Ext.form.FormPanel,{ constructor:function(){ PersonViewFormPanel.superclass.constructor.call(this,{ id:"form", layout:"form", defaultType:"textfield", baseCls:"x-plain", style:"padding:5px", defaults:{width:175}, width:240, height:85, labelWidth:45, items:[ {fieldLabel:"姓名",id:"name"}, {fieldLabel:"性别",id:"sex"}, {fieldLabel:"年龄",id:"age"} ] }); } }); PersonInfoFormPanel = Ext.extend(Ext.form.FormPanel,{ constructor:function(){ PersonInfoFormPanel.superclass.constructor.call(this,{ layout:"form", id:"info_form", defaultType:"textfield", baseCls:"x-plain", bodyStyle:"padding:5px", defaults:{width:150}, width:240, height:85, labelWidth:45, items:[ {fieldLabel:"姓名",id:"name",allowBlank:false,blankText:"姓名必须填写!",emptyText:"必填"}, { xtype:"combo", fieldLabel:"性别", emptyText:"请选择", hiddenName:"sex", displayField:"name", valueField:"value", triggerAction:"all", mode:"local", readOnly:true, store:new Ext.data.JsonStore({ fields:["value","name"], data:[{value:0,name:"男"},{value:1,name:"女"}] }) }, {fieldLabel:"年龄",id:"age"} ] }); }, getValues:function(){ if(this.getForm().isValid()) return new Ext.data.Record(this.getForm().getValues()); else throw Error("表单验证未通过!"); }, setValues:function(_record){ this.getForm().loadRecord(_record); }, reset:function(){ this.getForm().reset(); } }); InsertPersonInfoWindow = Ext.extend(Ext.Window,{ form:null, constructor:function(){ this.form = new PersonInfoFormPanel(); InsertPersonInfoWindow.superclass.constructor.call(this,{ title:"添加人员", closeAction:"hide", height:155, width:240, modal:true, plain:true, resizable:false, items:this.form, buttons:[ { text:"确定", handler:function(){ this.onSubmitClick(); }, scope:this },{ text:"取消", handler:function(){ this.onCancelClick(); }, scope:this } ] }); this.addEvents("submit"); }, close:function(){ this.form.reset(); this.hide(); }, onSubmitClick:function(){ try{ this.fireEvent("submit",this,this.form.getValues()); }catch(e){ Ext.Msg.alert("错误",e); } }, onCancelClick:function(){ this.close(); } }); PersonListGridPanel = Ext.extend(Ext.grid.GridPanel,{ InsertWindow:null, constructor:function(){ this.InsertWindow = new InsertPersonInfoWindow(); PersonListGridPanel.superclass.constructor.call(this,{ id:"grid", width:240, autoHeight:true, tbar:[ { text:"添加", handler:function(){ this.InsertWindow.show(); this.InsertWindow.on("submit",function(_window,_record){ Ext.Ajax.request({ url:"test5.pfv", params:_record.data, success:function(_response){ Ext.getCmp("grid").getStore().add( new Ext.data.Record(Ext.util.JSON.decode(_response.responseText))); _window.close(); } }); }); }, scope:this },"-", {text:"修改"},"-", {text:"删除"} ], columns:[ {header:"姓名",dataIndex:"name",width:80}, {header:"性别",dataIndex:"sex",width:80}, {header:"年龄",dataIndex:"age",width:80} ], store:new Ext.data.JsonStore({ autoLoad:true, fields:["name","sex","age"], url:"test4.pfv" }), sm:new Ext.grid.RowSelectionModel({ singleSelect:true, listeners:{ "rowselect":{ fn:function(_rsm,_index,_record){ this.fireEvent("rowselect",_record); }, scope:this } } }) }); this.addEvents("rowselect"); } }); Ext.onReady(function(){ var _grid = new PersonListGridPanel(); // var _form = new PersonViewFormPanel(); var _window = new Ext.Window({ renderTo:Ext.getBody(), title:"测试组件化编程", resizable:false, plain:true, frame:true, items:[ _grid ] }); _window.show(); // _grid.on("rowselect",function(_record){ // this.getForm().loadRecord(_record); // },_form); }); [/code] [code="java"] @RequestMapping(value="/test5.pfv") public void test5(HttpServletRequest request, HttpServletResponse response) throws Exception { String name = request.getParameter("name"); String sex = request.getParameter("sex"); String age = request.getParameter("age"); Map<String, String> map = new HashMap<String, String>(); map.put("name", name); map.put("sex", "0".equals(sex)?"男":"女"); map.put("age", age); JSON json = JSONObject.fromObject(map); json.write(response.getWriter()); [/code] [b]问题补充:[/b] 回复1楼,如果我把Ext.Ajax.request注掉,直接把record add到store里面又没有问题,不存在多次执行操作的问题

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

华为初面+综合面试(Java技术面)附上面试题

华为面试整体流程大致分为笔试,性格测试,面试,综合面试,回学校等结果。笔试来说,华为的难度较中等,选择题难度和网易腾讯差不多。最后的代码题,相比下来就简单很多,一共3道题目,前2题很容易就AC,题目已经记不太清楚,不过难度确实不大。最后一题最后提交的代码过了75%的样例,一直没有发现剩下的25%可能存在什么坑。 笔试部分太久远,我就不怎么回忆了。直接将面试。 面试 如果说腾讯的面试是挥金如土...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

讲一个程序员如何副业月赚三万的真实故事

loonggg读完需要3分钟速读仅需 1 分钟大家好,我是你们的校长。我之前讲过,这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

win10暴力查看wifi密码

刚才邻居打了个电话说:喂小灰,你家wifi的密码是多少,我怎么连不上了。 我。。。 我也忘了哎,就找到了一个好办法,分享给大家: 第一种情况:已经连接上的wifi,怎么知道密码? 打开:控制面板\网络和 Internet\网络连接 然后右击wifi连接的无线网卡,选择状态 然后像下图一样: 第二种情况:前提是我不知道啊,但是我以前知道密码。 此时可以利用dos命令了 1、利用netsh wlan...

上班一个月,后悔当初着急入职的选择了

最近有个老铁,告诉我说,上班一个月,后悔当初着急入职现在公司了。他之前在美图做手机研发,今年美图那边今年也有一波组织优化调整,他是其中一个,在协商离职后,当时捉急找工作上班,因为有房贷供着,不能没有收入来源。所以匆忙选了一家公司,实际上是一个大型外包公司,主要派遣给其他手机厂商做外包项目。**当时承诺待遇还不错,所以就立马入职去上班了。但是后面入职后,发现薪酬待遇这块并不是HR所说那样,那个HR自...

总结了 150 余个神奇网站,你不来瞅瞅吗?

原博客再更新,可能就没了,之后将持续更新本篇博客。

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

带了6个月的徒弟当了面试官,而身为高级工程师的我天天修Bug......

即将毕业的应届毕业生一枚,现在只拿到了两家offer,但最近听到一些消息,其中一个offer,我这个组据说客户很少,很有可能整组被裁掉。 想问大家: 如果我刚入职这个组就被裁了怎么办呢? 大家都是什么时候知道自己要被裁了的? 面试软技能指导: BQ/Project/Resume 试听内容: 除了刷题,还有哪些技能是拿到offer不可或缺的要素 如何提升面试软实力:简历, 行为面试,沟通能...

!大部分程序员只会写3年代码

如果世界上都是这种不思进取的软件公司,那别说大部分程序员只会写 3 年代码,恐怕就没有程序员这种职业。

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

HTTP与HTTPS的区别

面试官问HTTP与HTTPS的区别,我这样回答让他竖起大拇指!

程序员毕业去大公司好还是小公司好?

虽然大公司并不是人人都能进,但我仍建议还未毕业的同学,尽力地通过校招向大公司挤,但凡挤进去,你这一生会容易很多。 大公司哪里好?没能进大公司怎么办?答案都在这里了,记得帮我点赞哦。 目录: 技术氛围 内部晋升与跳槽 啥也没学会,公司倒闭了? 不同的人脉圈,注定会有不同的结果 没能去大厂怎么办? 一、技术氛围 纵观整个程序员技术领域,哪个在行业有所名气的大牛,不是在大厂? 而且众所...

程序员为什么千万不要瞎努力?

本文作者用对比非常鲜明的两个开发团队的故事,讲解了敏捷开发之道 —— 如果你的团队缺乏统一标准的环境,那么即使勤劳努力,不仅会极其耗时而且成果甚微,使用...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发(16k)

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

终于懂了TCP和UDP协议区别

终于懂了TCP和UDP协议区别

Python爬虫,高清美图我全都要(彼岸桌面壁纸)

爬取彼岸桌面网站较为简单,用到了requests、lxml、Beautiful Soup4

无代码时代来临,程序员如何保住饭碗?

编程语言层出不穷,从最初的机器语言到如今2500种以上的高级语言,程序员们大呼“学到头秃”。程序员一边面临编程语言不断推陈出新,一边面临由于许多代码已存在,程序员编写新应用程序时存在重复“搬砖”的现象。 无代码/低代码编程应运而生。无代码/低代码是一种创建应用的方法,它可以让开发者使用最少的编码知识来快速开发应用程序。开发者通过图形界面中,可视化建模来组装和配置应用程序。这样一来,开发者直...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

美团面试,问了ThreadLocal原理,这个回答让我通过了

他想都想不到,ThreadLocal我烂熟于心

大牛都会用的IDEA调试技巧!!!

导读 前天面试了一个985高校的实习生,问了他平时用什么开发工具,他想也没想的说IDEA,于是我抛砖引玉的问了一下IDEA的调试用过吧,你说说怎么设置断点...

面试官:你连SSO都不懂,就别来面试了

大厂竟然要考我SSO,卧槽。

程序员是做全栈工程师好?还是专注一个领域好?

昨天,有位大一的同学私信我,说他要做全栈工程师。 我一听,这不害了孩子么,必须制止啊。 谁知,讲到最后,更确定了他做全栈程序员的梦想。 但凡做全栈工程师的,要么很惨,要么很牛! 但凡很牛的,绝不是一开始就是做全栈的! 全栈工程师听起来好听,但绝没有你想象的那么简单。 今天听我来给你唠,记得帮我点赞哦。 一、全栈工程师的职责 如果你学习编程的目的只是玩玩,那随意,想怎么学怎么学。...

终于,月薪过5万了!

来看几个问题想不想月薪超过5万?想不想进入公司架构组?想不想成为项目组的负责人?想不想成为spring的高手,超越99%的对手?那么本文内容是你必须要掌握的。本文主要详解bean的生命...

我说我懂多线程,面试官立马给我发了offer

不小心拿了几个offer,有点烦

自从喜欢上了B站这12个UP主,我越来越觉得自己是个废柴了!

不怕告诉你,我自从喜欢上了这12个UP主,哔哩哔哩成为了我手机上最耗电的软件,几乎每天都会看,可是吧,看的越多,我就越觉得自己是个废柴,唉,老天不公啊,不信你看看…… 间接性踌躇满志,持续性混吃等死,都是因为你们……但是,自己的学习力在慢慢变强,这是不容忽视的,推荐给你们! 都说B站是个宝,可是有人不会挖啊,没事,今天咱挖好的送你一箩筐,首先啊,我在B站上最喜欢看这个家伙的视频了,为啥 ,咱撇...

代码注释如此沙雕,会玩还是你们程序员!

某站后端代码被“开源”,同时刷遍全网的,还有代码里的那些神注释。 我们这才知道,原来程序员个个都是段子手;这么多年来,我们也走过了他们的无数套路… 首先,产品经理,是永远永远吐槽不完的!网友的评论也非常扎心,说看这些代码就像在阅读程序员的日记,每一页都写满了对产品经理的恨。 然后,也要发出直击灵魂的质问:你是尊贵的付费大会员吗? 这不禁让人想起之前某音乐app的穷逼Vip,果然,穷逼在哪里都是...

2020春招面试了10多家大厂,我把问烂了的数据库事务知识点总结了一下

2020年截止目前,我面试了阿里巴巴、腾讯、美团、拼多多、京东、快手等互联网大厂。我发现数据库事务在面试中出现的次数非常多。

前端还能这么玩?(女朋友生日,用前端写了一个好玩的送给了她,高兴坏了)

前端还能这么玩?(女朋友生日,用前端写了一个好玩的送给了她,高兴坏了)

立即提问
相关内容推荐