extjs 数据修改不成功,在页面修改数据,store中的值不变,求大神指导

小弟在搞archibus移动端的二次开发,主要是用extjs集成框架,有些东西是封装在内部,小弟捕捉不到,目前在修改数据上遇到问题,求大神指教

1个回答

store中的值不变,在修改之后重新进行load一次呀。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于Extjs刷新grid中数据的问题
通过grid中的按钮打开一个panel页面,在panel中修改数据保存后,调用了Ext.getCmp('travelquerygrid').getStore().reload();Store里面的数据已经刷新了,但是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); } }); } } } });
extjs4页面和数据库交互
var store; var grid; var pageSize = 2; var str = ""; function search(){ str = document.getElementById("sstj").value; //alert(str); store.reload({params:{ start: 0, limit: pageSize, str:str }}); } Ext.onReady(function() { Ext.QuickTips.init(); Ext.state.Manager.setProvider(new Ext.state.CookieProvider()); var form = new Ext.form.FormPanel({ baseCls: 'x-plain', layout:'absolute', url:'save-form.php', defaultType: 'textfield', items: [{ x: 60, y: 0, id:'id', name: 'to', anchor:'100%' // anchor width by percentage },{ x: 0, y: 5, xtype:'label', text: '用户编号:' },{ x: 60, y: 0, id:'userid', name: 'to', anchor:'100%' // anchor width by percentage },{ x: 0, y: 35, xtype:'label', text: '用户名:' },{ x: 60, y: 30, id:'username', name: 'username', anchor: '100%' // anchor width by percentage },{ x: 0, y: 65, xtype:'label', text: '性别:' },{ x: 60, y: 60, id:'usergender', name: 'usergender', anchor: '100%' // anchor width by percentage },{ x: 0, y: 95, xtype:'label', text: '部门:' },{ x: 60, y: 90, id:'useraction', name: 'useraction', anchor: '100%' // anchor width by percentage },{ x: 0, y: 125, xtype:'label', text: '籍贯:' },{ x: 60, y: 120, id:'userbirthplace', name: 'userbirthplace', anchor: '100%' // anchor width by percentage },{ x: 0, y: 155, xtype:'label', text: '出生日:' },{ x: 60, y: 150, id:'userbirth', name: 'userbirth', anchor: '100%' // anchor width by percentage }] }); var window = new Ext.Window({ title: '信息编辑', width: 500, modal:true, closeAction:'hide', height:300, minWidth: 300, minHeight: 200, layout: 'fit', plain:true, bodyStyle:'padding:5px;', buttonAlign:'center', items: form, buttons: [{ text: '保存', handler:function(){ var id = Ext.getCmp("id").getValue(""); var userid = Ext.getCmp("userid").getValue(""); var username = Ext.getCmp("username").getValue(""); var usergender = Ext.getCmp("usergender").getValue(""); var useraction = Ext.getCmp("useraction").getValue(""); var userbirthplace = Ext.getCmp("userbirthplace").getValue(""); var userbirth = Ext.getCmp("userbirth").getValue(""); var url = 'http://localhost:8080/extjs/AddStudent?id='+id+'&userid='+userid+'&username='+username+'&usergender='+usergender+'&useraction='+useraction+'&userbirthplace='+userbirthplace+'&userbirth='+userbirth; $.ajax({ type:'post', url:'http://localhost:8086/extjs/CheckStudent?id='+id+'&userid='+userid, success:function(str1){ if(str1!=""){ alert("用户编号不能重复!"); }else{ $.ajax({ type:'post', url:encodeURI(encodeURI(url)), success:function(){ window.hide(); store.load({ params: { start: 0, limit: pageSize} }); } }); } } }); } },{ text: '取消', handler:function(){ window.hide(); } }] }); var buttons = []; for (var i = 0; i < 3; i++) { if(i==0){ buttons.push({ text: '新增', width:40, handler: function(b) { /*Ext.getCmp("id").setValue(""); Ext.getCmp("userid").setValue(""); Ext.getCmp("username").setValue(""); Ext.getCmp("useraddress").setValue(""); Ext.getCmp("userphone").setValue(""); Ext.getCmp("useremail").setValue(""); Ext.getCmp("userrole").setValue(""); Ext.getCmp('id').setVisible(false);*/ form.getForm().reset(); window.show(); } }) } if(i==1){ buttons.push({ text: '修改', width:40, handler: function(b) { //alert('You clicked ' + b.text); var s = grid.getSelectionModel().getSelections(); if(s!=""){ // alert(s[0].data.id); var id = s[0].data.id; var userid = s[0].data.userid; var username = s[0].data.username; var usergender = s[0].data.usergender; var useraction = s[0].data.useraction; var userbirthplace = s[0].data.userbirthplace; var userbirth = s[0].data.userbirth; Ext.getCmp("id").setValue(id); Ext.getCmp("userid").setValue(userid); Ext.getCmp("username").setValue(username); Ext.getCmp("usergender").setValue(usergender); Ext.getCmp("useraction").setValue(useraction); Ext.getCmp("userbirthplace").setValue(userbirthplace); Ext.getCmp("userbirth").setValue(userbirth); Ext.getCmp('id').setVisible(false); window.show(); }else{ alert("请选择行后再修改!"); } } }) } if(i==2){ buttons.push({ text: '删除', width:40, handler: function(b) { var s = grid.getSelectionModel().getSelections(); if(s==""){ alert("请选择行后再删除!"); }else if(confirm('确认要删除此记录吗?')){ var r = s[0].data.id; $.post('http://localhost:8080/extjs/DeleUserServlet?id='+r,function(){ store.load({ params: { start: 0, limit: pageSize} }); }); // alert("删除成功!"); } } }) } } store = new Ext.data.JsonStore({ url: 'http://localhost:8080/extjs/UserServlet', // url:'index.json', totalProperty:'totalCount', root: 'bugs', baseParams:{ str:"" }, fields: ['id', 'userid', 'username','usergender','useraction','userbirthplace','userbirth'] }); store.on('beforeload',function(){ // alert(str); Ext.apply(this.baseParams,{ str:str }); }); store.on("load",function(){ for(var i=0; i<store.getCount(); i++){ //alert(store.getAt(i).get("userid")); } }); grid = new Ext.grid.GridPanel({ store: store, tbar:buttons, bbar : new Ext.PagingToolbar({ pageSize : pageSize, store : store, displayInfo : true, displayMsg : '第 {0} 条到 {1} 条记录,一共 {2} 条', emptyMsg : "没有记录" }), columns: [ { header : '用户ID', width : 175, sortable : true, dataIndex: 'id', hidden:true },{ header : '用户编号', width : 75, sortable : true, dataIndex: 'userid' }, { header : '用户名', width : 75, sortable : true, dataIndex: 'username' }, { header : '性别', width : 100, sortable : true, dataIndex: 'usergender' }, { header : '部门', width : 75, sortable : true, dataIndex: 'useraction' }, { header : '籍贯', width : 85, sortable : true, dataIndex: 'userbirthplace' }, { header : '出生日', width : 85, sortable : true, dataIndex: 'userbirth' } ], stripeRows: true, height: 500, width: 1000, stateful: true, stateId: 'grid' }); store.load({ params: { start: 0, limit: pageSize} }); grid.render('grid-example'); });
Extjs的ItemSelector中的toStore重新加载的问题
在使用ItemSelector的时候,根据传入的参数重新加载toStore,但是加载后的toStore数据不刷新还是第一次加载的数据。具体代码如下: [code="java"] { id : 'assignResource', text : '分配资源', icon : 'images/drop-yes.gif', cls : 'x-btn-text-icon', handler : function() { var sm = grid.getSelectionModel(); var sel = sm.getSelected(); if (sm.hasSelection()) { getResourcesToStoreJsonUrl = getResourcesToStoreJsonUrl + "&resourceList=" + sel.data.id; alert(getResourcesToStoreJsonUrl); var resourceResultsStore = new Ext.data.Store({ url : getResourcesJsonUrl, reader : new Ext.data.JsonReader({ root : 'rows', // 返回结果集 pruneModifiedRecords : true, totalProperty : 'results', // 返回总条数 id : 'returnValue' // 主键 }, [{ name : 'returnValue' }, { name : 'displayText' }]) }); var resourcesToStore = new Ext.data.Store({ url : getResourcesToStoreJsonUrl, reader : new Ext.data.JsonReader({ root : 'rows', // 返回结果集 pruneModifiedRecords : true, totalProperty : 'results', // 返回总条数 id : 'returnValue' // 主键 }, [{ name : 'returnValue' }, { name : 'displayText' }]) }); // 分配资源form var itemSelect = new Ext.ux.ItemSelector( { name : "resourcesList", fieldLabel : "资源组分配", dataFields : ["returnValue", "displayText"], fromStore : resourceResultsStore, toStore : resourcesToStore, msWidth : 250, msHeight : 200, valueField : "returnValue", displayField : "displayText", imagePath : "images/", toLegend : "已分配资源", fromLegend : "现有资源", toTBar : [{ text : "清除", handler : function() { var i = assingResourceForm.getForm() .findField("itemselector"); i.reset.call(i); } }] }); resourcesToStore.reload(); resourceResultsStore.reload(); var assingResourceForm = new Ext.form.FormPanel({ url : postUrl, xtype : 'fieldset', autoHeight : true, layout : 'form', items : [itemSelect] }); var assignRWindow = new Ext.Window({ layout : 'fit', title : '<div style="text-align:center">分配资源</div>', width : 800, height : 520, closeAction : 'hide', plain : true, maximizable : true, items : new Ext.TabPanel({ region : 'center', border : false, activeTab : 0, items : [{ title : "资源分配登记", autoScroll : true, items : [assingResourceForm] }] }), buttons : [{ text : '保存', handler : function() { // 保存修改信息 if (assingResourceForm.getForm() .isValid()) { Ext.Msg .alert( '数据提交', '新分配的资源ID为以下: <br />' + (assingResourceForm .getForm() .getValues(true))); var conn = Ext.lib.Ajax .getConnectionObject().conn; conn .open( "post", assignResourcesUrl + "&" + assingResourceForm .getForm() .getValues(true), false); conn.send(null); /* * if * ((conn.responseText).indexOf('correct') == * -1) { Ext.MessageBox.alert('提示', * '输入的验证码不正确,请重新输入!'); * authImg.focus(); return false; } */ } else { Ext.MessageBox.alert('错误', '请修正页面提示的错误后提交。'); } } }, { text : '关闭', handler : function() { assignRWindow.hide(); } }], listeners : { // 保证最大化后窗口中的滚动条不出问题 close : function(w) { w.restore(); }, maximize : function(w) { w.setPosition(document.body.scrollLeft, document.body.scrollTop); } } }); assignRWindow.setPosition(0, 3); assignRWindow.show(); } else { Ext.MessageBox.alert('提示', '请选择要为其分配资料的组!').getDialog('提示') .setPosition(300, 150); } } } [/code] 有遇到过这个问题的朋友还请指点一下。 感谢!
ExtJS4 grid日期格式问题
grid显示出问题,在网上找了解决办法做了格式转换显示正常了,插入修改都没问题,但是删除数据的时候报错,grid页面上显示的是2001-11-05,但是rec.data获取到的是 Mon Nov 05 2001 00:00:00 GMT+0800 (中国标准时间) 这种格式,怎么解决啊,求助 Field error in object 'book' on field 'date': rejected value [2001-11-05T00:00:00]; codes [typeMismatch.book.date,typeMismatch.date,typeMismatch.java.util.Date,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [book.date,date]; arguments []; default message [date]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date' for property 'date'; nested exception is java.lang.IllegalArgumentException: Could not parse date: Unparseable date: "2001-11-05T00:00:00"] ``` ``` Book.del = function (grid, rowIndex, colIndex){ Ext.Msg.confirm("提示","你确定要删除该记录么?",function(confirm){ if("yes" == confirm){ var store = grid.getStore(); var rec = store.getAt(rowIndex); Ext.Ajax.request({ url: params:rec.data, success: function(response){ var text = response.responseText; var result = Ext.JSON.decode(text); if(result.success){ Ext.Msg.alert("信息","删除成功"); store.reload(); }else{ Ext.Msg.alert("错误",result.message); } } }); } }); }; ``` ``` function Todate(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;   }; Book.store = Ext.create('Ext.data.Store',{ fields:[ 'bookName', 'author', 'bookType', 'createBy', { name: 'date',type:'date',dateFormat: 'Y-m-d', convert: Todate } ], proxy: { type: 'ajax', url : "bookController.ajax?method=listBook", reader: { type: 'json', root: 'resultList', totalProperty: 'totalCount' } } }); ``` ``` { text:'出版日期', dataIndex:'date', renderer: Ext.util.Format.dateRenderer('Y-m-d'), width:200 } ``` ``` Book.formPanel = Ext.create('Ext.form.Panel',{ bodyPadding: 10, defaultType:'textfield', items:[ {fieldLabel:'书名',name:'bookName',allowBlank:false}, {fieldLabel:'作者',name:'author',allowBlank:false}, {fieldLabel:'书籍类型',name:'bookType',allowBlank:false}, {fieldLabel:'出版日期',name:'date',xtype:'datefield',format:'Y-m-d',allowBlank:false}, new Ext.form.Hidden({name:'_saveType'}), new Ext.form.Hidden({name:'id'}) ] }); ``` ```
用extjs 的editorgrid 表格自己乱动
刚接触ext ,我用了一个editorgrid,每次想要修改单元格中的数据时,表格就会乱跑,然后表格下面会出一个横向滚动条,改怎么解决,好像ff下没什么问题,ie7就会有这个问题 [b]问题补充:[/b] [code="java"]{ header:'编号', sortable:true,// 是否能排序 menuDisabled:false,// 是否允许菜单操作 width:40, dataIndex:'id', editor:new Ext.form.TextField({ maxLength:20 }) },{ header:'收支', sortable:true, menuDisabled:false, width:40, dataIndex:'title', editor:new Ext.form.TextField({ maxLength:20 }) }, {[/code] 代码里我都加了width , 如图所示: 这是点击以后的结果,我左边的一些就这样跑到里面去了 [img]http://dl.iteye.com/upload/attachment/143407/dac90cdd-0bcb-347a-8aad-fbb780c8221f.bmp[/img] [b]问题补充:[/b] 而右边却空出一块空白的来 [b]问题补充:[/b] 可能刚才截的图不是太好,我加上allowBlank:false也不行, 在编辑前是这样的: [img]http://dl.iteye.com/upload/attachment/143413/53180234-4993-31dc-8cba-07a515687c9e.jpg[/img] 当点击开始编辑时就成这样了: [img]http://dl.iteye.com/upload/attachment/143415/0657bea1-dba1-3fdf-924b-46e7bed959a9.jpg[/img] [b]问题补充:[/b] 是不是有个属性在ie中有问题,同样的代码在Firefox下没问题 [code="java"] var user_in_out = new Ext.grid.ColumnModel([new Ext.grid.RowNumberer(), { header:'编号', sortable:true,// 是否能排序 menuDisabled:false,// 是否允许菜单操作 width:40, dataIndex:'id', editor:new Ext.form.TextField({ maxLength:20, allowBlank:false }) },{ header:'收支', sortable:true, menuDisabled:false, width:40, dataIndex:'income', renderer : income, editor:new Ext.form.TextField({ allowBlank:false, maxLength:20 }) }, { header:'金额', sortable:true, menuDisabled:false, width:40, dataIndex:'money', renderer : money, editor:new Ext.form.TextField({ allowBlank:false, maxLength:20 }) }, { header:'操作人', id:'user', sortable:true, dataIndex:'user', width:40, menuDisabled:false, editor:new Ext.form.TextField({ allowBlank:false, maxLength : 100 }) },{ header:'备注', id : 'remark', width:60, menuDisabled:true, dataIndex:'remark', editor:new Ext.form.TextField({ allowBlank:false, maxLength:20 }) },{ header:'日期', sortable:true, id : 'date', width : 40, renderer : Ext.util.Format.dateRenderer('d/m/Y'),//格式化日期格式 dataIdex:'date', menuDisabled:true }]); // 设置money格式 function money(val){ return '<font color=red>'+val+'元</font>' ; }; // 设置收支格式 function income(val){ return '<font color=red>'+val+'</font>'; } user_in_out.defaultSortable = false; var ds_duty = new Ext.data.Store({ proxy : new Ext.data.HttpProxy({//在同一个域中,使用httpproxy url : 'duty.php' }), // proxy : new Ext.data.MemoryProxy(data), reader : new Ext.data.JsonReader({//读取json数据格式 root : 'topics',//数据节点 totalProperty: 'totalCount'//总的记录数 }, [{ },{ name:'id', type:'int' }, { name:'income', type:'string' }, { name:'money', type:'string' },{ name:'user', type:'string' },{ name:'remark', type:'string' },{ name:'date', type:'date' }]) }); //添加相应按钮 var item_add = new Ext.Button({ text : '&nbsp;添加条目', iconCls : 'add', style : 'margin-left:20px', handler : function(){ } }); var item_del = new Ext.Button({ text : '&nbsp;删除条目', iconCls : 'del', handler : function (){ } }); var item_show = new Ext.Button({ text : '&nbsp显示条目', handler : function (){ } }); // 添加Search var item_ser = new Ext.ux.form.SearchField({ ds : ds_duty, width : 236 }); var grid_duty = new Ext.grid.EditorGridPanel({ title : '收支管理', // iconCls : 'icon-grid', loadMask : { msg : '数据加载中...' }, region : 'center', autoWidth : true, height : 300, cm : user_in_out, ds : ds_duty, sm : new Ext.grid.RowSelectionModel({ singleSelect : true }), enableColumnMove : false, trackMouseOver : false, frame : true, autoExpandColumn : 'date',//该条目将沾满省余的空间 clicksToEdit : 1, viewConfig: { forceFit:true, enableRowBody:true, showPreview:true }, collapsible: false, animCollapse: false, tbar : [item_add,'-',item_del,'-',item_show,'-',item_ser,'查询'], bbar : new Ext.PagingToolbar({ pageSize: 5, store: ds_duty, displayInfo: true, displayMsg: '当前显示 {0} - {1} of {2}', emptyMsg: "No topics to display" }) }); ds_duty.load({params:{start:0, limit:5}});// 将数据分页载入表格, Ext.ns('app.grid');//设置命名空间 var p_duty = { id : 'duty-panel', border : false, layout : 'border', items : [grid_duty] };[/code] [b]问题补充:[/b] 谢谢大家的帮助,我把[color=darkred]// autoExpandColumn : 'date',[/color]和[color=darkred]forceFit:true,[/color]这两条注释掉以后就好了,这样的话就是表格会严格按照我cm里定义的width 来显示,虽然好了,但我还是不明白为什么会在IE下出现这样的问题 [b]问题补充:[/b] 因为外层的容器比较多,数据也是从服务器读取的,所以没有贴出来 [b]问题补充:[/b] 我把其中刚注释的任意一条打开都会出现刚开始的问题,但是用firefrox 就能正常显示,是不是这里面的属性,有的在ie下显示有问题呀 [b]问题补充:[/b] 按照你说的,我把上面的代码提取出来测试发现以下几个问题: 1、 [color=red] autoExpandColumn : 'date',和forceFit:true[/color] 二者择其一则在ie和ff下显示都没有问题 2、我又把它放到原来的容器里,如果不指定[color=red]forceFit:true[/color] 那么ff也会出问题,而ie是无论怎样都会出问题 3、我的上层容器的部分代码: [code="java"]var view = new Ext.Viewport({// create the main frame // 主界面 layout : 'border', title : '理财系统 V1.0', items : [{ region :'north', title :'理财系统 V1.0', height :0, margins:'5 0 0 0' },{ region : 'west', split : true,//加入分割线 collapsible : true,//可以收起展开 layout : 'accordion', title : '管理选项', items : [managerTree],//装载其它的panel width : 200, bbar : [{text : '开始', width : 50, style : 'margin-left:10px', iconCls : 'start', menu : { items : [{ text : '注销', width : 30, iconCls : 'logout' },'-',{ text : '关闭', iconCls : 'close', handler : function (){ // Ext.Msg.alert('afdafda'); } }] } }] }, { id : 'center', region : 'center', border : true, layout : 'card',//采用card 布局方式,每次只显示一个页面 activeItem : 0, items : [p_duty] }] }); Ext.getCmp('center').layout.setActiveItem('duty-panel'); });[/code] 麻烦你看一下那个地方有问题,谢谢了 [b]问题补充:[/b] 非常感谢atian25架构师不辞厌倦的帮我解决这个问题,但是我的还是有问题,我用的3.0版本的,不过还是那个问题,我现在把那个项目大了一个包,希望能有空帮我看一下,直接运行manage.html,即可,谢谢
extjs3.4 window组件第一次打开后关闭正常,第二次打开后就不能关闭了
<p> </p> <pre name="code" class="js"><span style="color: #ff0000;">在页面上有个grid表格 里面有个增加按钮,点击增加按钮时弹出一个窗口,填写相关信息 第一次点击增加按钮,窗口打开,可以关闭,第二次点击增加按钮后,弹出的窗口就不能关闭了. 截图是两次打开窗口的截图,第二次截图还多了几个下拉框 ,用的是extjs3.4的版本,改成extjs2.0的版本就正常了,是不是两个版本之间有什么区别,求指导</span> grid代码 var Record CommonGrid = Ext .extend( Ext.grid.GridPanel, { // saveFlag : true, constructor : function(cfg) { var cfg = cfg || {}; Ext.apply(this, cfg); var data = [ [ '10.21.34.56', '华为设备', '5680', 'aa', '1', '1', '1', '1', '1', '1' ], [ '10.21.34.56', '中兴设备', 'C200', 'aa', '2', '1', '1', '1', '1', '1' ], [ '10.21.34.56', '烽火设备', 'AN5616', 'aa', '2', '2', '1', '1', '1', '1' ], [ '10.21.34.56', '贝尔设备', 'AN5616', 'aa', '3', '3', '1', '1', '1', '1' ] ]; var Record = Ext.data.Record.create([ { name : 'logicid' }, { name : 'logiccode' }, { name : 'netproId' }, { name : 'logicname' }, { name : 'logicdec' }, { name : 'netproname' }, { name : 'netmodel' }, { name : 'bmodel' }, { name : 'ip' }, { name : 'port' } ]); this.NameCombo = new Ext.form.ComboBox({ id : 'nameCombo', emptyText : "请选择...", isFormField : true, width : 100, mode : 'local', allowBlank : false,// 不允许为空 blankText : "不能为空",// forceSelection : true, triggerAction : 'all', fieldLabel : "逻辑网元名称", displayField : 'text', listWidth : 100, valueField : 'id', store : new Ext.data.SimpleStore({ data : [ [ '1', '合肥' ], [ '2', '芜湖' ], [ '3', '安庆' ], [ '4', '蚌埠' ] ], fields : [ 'id', 'text' ] }), editable : false,// 不允许输入 }); this.ClassCombo = new Ext.form.ComboBox({ id : 'classCombo', emptyText : "请选择...", isFormField : true, width : 100, mode : 'local', allowBlank : false,// 不允许为空 blankText : "不能为空",// forceSelection : true, triggerAction : 'all', fieldLabel : "网元协议名称", displayField : 'text', listWidth : 100, valueField : 'id', store : new Ext.data.SimpleStore({ data : [ [ '1', '合肥' ], [ '2', '芜湖' ], [ '3', '安庆' ], [ '4', '蚌埠' ] ], fields : [ 'id', 'text' ] }), editable : false,// 不允许输入 }); this.store = new Ext.data.Store({ // proxy : new Ext.data.HttpProxy({url : // 'getProcessRuleList.action', method : 'POST'}), // reader : new Ext.data.JsonReader( // {totalProperty:'total',root:'root'}, // [{name : 'id'},{name : 'busiTypeId'}, {name : // 'busiType'}, {name // : 'faultId'}, // {name : 'faultName'}, {name : 'accessWay'},{name // : 'portType'}, // {name : 'processName'}, // {name : 'processchname'}, {name : 'createTime'}] // ) autoLoad : true, proxy : new Ext.data.MemoryProxy(data),// 获得本地数据 reader : new Ext.data.ArrayReader( // 解析数据 {}, Record ) }); CommonGrid.superclass.constructor .call( this, { title : '网元信息列表', id : '_processRuleConfig', region : 'north', height : 300, border : false, stripeRows : true, split : true, /* * viewConfig:{ forceFit:true }, */ cm : new Ext.grid.ColumnModel( [ new Ext.grid.RowNumberer(), { header : '逻辑网元ID', align : 'center', dataIndex : 'logicid', width : 150, hidden : true }, { header : '逻辑网元编码', align : 'center', dataIndex : 'logiccode', width : 150, hidden : true }, { header : '网元协议ID', align : 'center', dataIndex : 'netproId', width : 150, hidden : true }, { header : '逻辑网元名称', align : 'center', dataIndex : 'logicname', width : 150, sortable : true }, { header : '逻辑网元描述', align : 'center', dataIndex : 'logicdec', width : 150, sortable : true }, { header : '网元协议名称', align : 'center', dataIndex : 'netproname', width : 150, renderer : this.detailInfoShow, sortable : true }, { header : '网元交互模式', align : 'center', dataIndex : 'netmodel', width : 150, sortable : true }, { header : '部署模式', align : 'center', dataIndex : 'bmodel', width : 150, sortable : true }, { header : '服务IP', align : 'center', dataIndex : 'ip', width : 150, sortable : true }, { header : '服务端口', align : 'center', dataIndex : 'port', width : 150, sortable : true } ]), bbar : new Ext.PagingToolbar( { pageSize : 10, store : this.store, firstText : '第一页', nextText : '下一页', prevText : '上一页', refreshText : '刷新', lastText : '最后一页', beforePageText : '当前', afterPageText : '页/共{0}页', displayInfo : true, displayMsg : '显示第 {0} 条到 {1} 条记录,一共 {2} 条', doLoad : function(C) { // 为了点击下一页传递参数用 var B = {}; var D = {}; A = this.paramNames; B[A.start] = C; B[A.limit] = this.pageSize; if (this .fireEvent( "beforechange", this, B) !== false) { this.store .load({ params : B, callback : function( records, option, success) { if (success) { Ext .getCmp("_processRuleConfig").store .load({ params : B }); } } }); } }, emptyMsg : "没有记录", items : [ ' ', { text : '新增', iconCls : 'new', handler : this.doAdd, scope : this }, '-', { text : '修改', iconCls : 'update', handler : this.doModify, scope : this }, '-', { text : '删除', iconCls : 'delete', handler : this.doDelete, scope : this }, '-', { text : '配置命令模板', iconCls : 'update', handler : this.doCommand, scope : this }, '-', { text : '查看物理网元', iconCls : 'find', handler : this.doNet, scope : this } ] }), tbar : new Ext.Toolbar( { items : [ '逻辑网元名称:', this.NameCombo, '-', '网元协议名称:', this.ClassCombo, '-', { text : '查询', iconCls : 'find', handler : this.doQuery, scope : this }, { text : '重置', iconCls : 'find', handler : this.doClear, scope : this } ] }) }); this.initListener(); }, initListener : function() { this.addListener("render", function() { this.loadMask = new Ext.LoadMask(Ext.getBody(), { msg : '正在载入数据,请稍候...' }); this.store.load({ params : { start : 0, limit : 5 } }); }, this); this.addListener("rowdblclick", function(grid, index, e) { this.doModify(); }, this); this.addListener("cellclick", function(grid, index, e) { this.doclick(); }, this); }, detailInfoShow : function(val, medadata, record, rowIndex, colIndex, store) { // var testOrderId = record.get('testOrderId'); return "&lt;a href='http://localhost:8080/extjs/jsp/netprotocol.jsp'&gt;" + val + "&lt;/a&gt;"; }, <span style="color: #ff0000;">//窗口弹出代码</span> <span style="color: #ff0000;"> doAdd : function() { if(Ext.getCmp('apWindow')!=null){ Ext.getCmp('apWindow').close(); var logicWindow = new LogicWindow({ pview : this }); logicWindow.show(); }else{ var logicWindow = new LogicWindow({ pview : this }); logicWindow.show(); } </span> }, doCommand : function() { // 举例说明 window .open( "http://localhost:8080/extjs/jsp/netprotocol.jsp", "_blank"); }, doNet : function() { // 举例说明 window .open( "http://localhost:8080/extjs/jsp/netprotocol.jsp", "_blank"); }, doclick : function() { var record = this.getSelectionModel().getSelected(); var logicname = record.get("logicname"); this.ppanel.configRegion.rule.logicname .setValue(logicname); this.ppanel.configRegion.rule.logicname.disable(); }, doModify : function() { var record = this.getSelectionModel().getSelected(); if (record == null) { Ext.Msg.alert('系统提示', padBlank + padBlank + "请选择一条记录!" + padBlank + padBlank); return; } var logicWindow = new LogicWindow({ pview : this }); logicWindow.show(); logicWindow.logicForm.loadData(record); }, doDelete : function() { var record = this.getSelectionModel().getSelected(); if (record == null) { Ext.Msg.alert('系统提示', padBlank + padBlank + "请选择一条记录!" + padBlank + padBlank); return; } this.store.remove(record); } }); <span style="color: #ff0000;">窗口代码</span> /** * 逻辑网元信息配置窗口 */ LogicWindow = Ext.extend(Ext.Window, { constructor : function(cfg) { var cfg = cfg || {}; Ext.apply(this, cfg); this.logicForm = new RuleCommand({ pwin : this }); <span style="color: #ff0000;"> LogicWindow.superclass.constructor.call(this, { title : "逻辑网元信息配置", id : 'apWindow', resizable : false, autoScroll : true, width : 1100, height : 300, // bodyStyle : 'padding:5px 0px 5px 5px', plain : true, modal : true, closeAction : 'close', closable:true, items : [ this.logicForm ], // buttonAlign : 'center', // buttons : [ { // text : '添加', // iconCls : 'save', // handler : this.doSave, // scope : this // }, { // text : '修改', // iconCls : 'cancel', // handler : this.doModify, // scope : this // }, { // text : '重置', // iconCls : 'find', // handler : this.doClear, // scope : this // } ] }); },</span> doClose : function() { //this.pwin.close(); }, // /** // * 保存信息 // */ doSave : function() { var o = this.logicForm.getData(); if (o == null) { Ext.MessageBox.alert("系统提示", padBlank + "请完善相关信息!" + padBlank); return; } //this.store.insert(n, new Ext.data.Record(data)); var n=this.pview.store.getCount(); this.pview.store.insert(n, new Ext.data.Record(o)); this.doClose(); }, // /** // * 添加公共信息 // */ // doInsert : function(o){ // var that = this ; // ResApManager.saveAp(o,{ // callback:function(data){ // if(data == -1) { // Ext.MessageBox.alert("系统提示", padBlank + "添加失败!" +padBlank); // } else { // that.doClose(); // Ext.MessageBox.alert("系统提示", padBlank + "添加成功!" +padBlank); // that.pview.getStore().reload(); // } // } // }); // }, // /** // * 修改公共信息 // */ // doUpdate : function(o){ // var that = this; // ResApManager.updateAp(o,{ // callback: function(data) { // if(data == -1) { // Ext.MessageBox.alert("系统提示:", padBlank + "修改失败!" + padBlank); // } else { // that.doClose(); // Ext.MessageBox.alert("系统提示", padBlank + "修改成功!" + padBlank); // that.pview.getStore().reload(); // } // } // }); // } }); /** * @author 网元协议配置 */ // var update_Id = null; /** * @author 网元协议配置 */ // var update_Id = null; RuleCommand = Ext.extend(Ext.form.FormPanel, { constructor : function(cfg) { var cfg = cfg || {}; Ext.apply(this, cfg); this.initialItems(); RuleCommand.superclass.constructor.call(this, { layout : 'form', region : 'center', height : '250', border : false, frame : true, split : true, // viewConfig : { // forceFit : true // }, autoScroll : true, buttonAlign : 'center', buttons : [ { text : '添加', iconCls : 'save', handler : this.doSave, scope : this }, { text : '修改', iconCls : 'cancel', handler : this.doModify, scope : this }, { text : '重置', iconCls : 'find', handler : this.doClear, scope : this } ] // bodyStyle:'margin: 10 0 5px 10px;', }); }, initialItems : function() { this.logicname = new Ext.form.TextField({ fieldLabel : "逻辑网元名称", width : 130, length : 10, allowBlank : false, // 不允许为空 blankText : '该项不能为空!'// 显示为空的提示信息 }); this.logiccode = new Ext.form.TextField({ fieldLabel : "逻辑网元编码", width : 130, length : 10, allowBlank : false, // 不允许为空 blankText : '该项不能为空!'// 显示为空的提示信息 }); this.logicdec = new Ext.form.TextField({ fieldLabel : "逻辑网元描述", width : 130, length : 10, allowBlank : false, // 不允许为空 blankText : '该项不能为空!'// 显示为空的提示信息 }); this.ip = new Ext.form.TextField({ fieldLabel : "服务IP", width : 130, length : 10, allowBlank : false, // 不允许为空 blankText : '该项不能为空!'// 显示为空的提示信息 }); this.port = new Ext.form.TextField({ fieldLabel : "服务端口", width : 130, length : 10, allowBlank : false, // 不允许为空 blankText : '该项不能为空!'// 显示为空的提示信息 }); this.netproname = new Ext.form.ComboBox({ id : 'netproname', emptyText : "请选择...", isFormField : true, width : 130, mode : 'local', allowBlank : false,// 不允许为空 blankText : "不能为空",// forceSelection : true, triggerAction : 'all', fieldLabel : "网元协议名称", displayField : 'text', listWidth : 100, valueField : 'id', store : new Ext.data.SimpleStore({ data : [ [ '1', '合肥' ], [ '2', '芜湖' ], [ '3', '安庆' ], [ '4', '蚌埠' ] ], fields : [ 'id', 'text' ] }), editable : false,// 不允许输入 }); this.netmodel = new Ext.form.ComboBox({ id : 'netmodel', emptyText : "请选择...", isFormField : true, width : 130, mode : 'local', allowBlank : false,// 不允许为空 blankText : "不能为空",// forceSelection : true, triggerAction : 'all', fieldLabel : "网元交互模式", displayField : 'text', listWidth : 100, valueField : 'id', store : new Ext.data.SimpleStore({ data : [ [ '1', '合肥' ], [ '2', '芜湖' ], [ '3', '安庆' ], [ '4', '蚌埠' ] ], fields : [ 'id', 'text' ] }), editable : false,// 不允许输入 }); this.bmodel = new Ext.form.ComboBox({ id : 'bmodel', emptyText : "请选择...", isFormField : true, width : 130, mode : 'local', allowBlank : false,// 不允许为空 blankText : "不能为空",// forceSelection : true, triggerAction : 'all', fieldLabel : "部署模式", displayField : 'text', listWidth : 100, valueField : 'id', store : new Ext.data.SimpleStore({ data : [ [ '1', '合肥' ], [ '2', '芜湖' ], [ '3', '安庆' ], [ '4', '蚌埠' ] ], fields : [ 'id', 'text' ] }), editable : false,// 不允许输入 }); this.fieldSet = new Ext.form.FieldSet({ title : '网元协议配置', width : 1000, height : 150, style : 'margin: 10 0 5px 10px;', items : [ { xtype : 'panel', layout : 'column', style : 'margin: 10px 0px 0px 0px;', items : [ { columnWidth : .3, layout : 'form', labelWidth : 120, items : this.logiccode }, { columnWidth : .3, layout : 'form', labelWidth : 120, items : this.logicname }, { columnWidth : .3, layout : 'form', labelWidth : 120, items : this.logicdec } ] }, { xtype : 'panel', layout : 'column', style : 'margin: 0px 0px 0px 0px;', items : [ { columnWidth : .3, layout : 'form', labelWidth : 120, items : this.netproname }, { columnWidth : .3, layout : 'form', labelWidth : 120, items : this.netmodel }, { columnWidth : .3, layout : 'form', labelWidth : 120, items : this.bmodel } ] }, { xtype : 'panel', layout : 'column', items : [ { columnWidth : .5, layout : 'form', labelWidth : 120, style : 'margin: 0px 0px 0px 0px;', items : this.port }, { columnWidth : .5, layout : 'form', labelWidth : 120, style : 'margin: 0px 0px 0px 0px;', items : this.ip } ] } ] }); this.items = [ this.fieldSet ]; // this.items = [ // // // // this.netComition,this.alarmContent,this.neNameCode,this.suceess,this.commandbak,this.neNameClass,this.flag, // this.fault,this.falgs]; // }, loadData : function(o) { this.logiccode.setValue(o.data.logiccode); this.logicname.setValue(o.data.logicname); this.logicdec.setValue(o.data.logicdec); this.netproname.setValue(o.data.netproname); this.netmodel.setValue(o.data.netmodel); this.bmodel.setValue(o.data.bmodel); this.port.setValue(o.data.port); this.ip.setValue(o.data.ip); }, getData : function() { if (this.getForm().isValid()) { var logiccode = this.logiccode.getValue(); var logicname = this.logicname.getValue(); var logicdec = this.logicdec.getValue(); var netproname = this.netproname.getRawValue(); var netmodel = this.netmodel.getRawValue(); var bmodel = this.bmodel.getRawValue(); var port = this.port.getValue(); var ip = this.ip.getValue(); var o = { logicname : logicname, logicdec : logicdec, netproname : netproname, netmodel : netmodel, bmodel : bmodel, port : port, ip : ip }; return o; } else { Ext.Msg.alert("系统提示", "请完善相关信息"); return; } } }); </pre>   <p> </p>
GridPanel得不到Json数据,
思路 getuser.jsp -> submit -> redirectuserlist.action -> userlist.jsp -> searchuser.action -> userlist.jsp(GridPanel显示数据) Struts.xml 相关 [code="xml"] <action name="redirectuserlist" class="userAction" method="redirectUserList"> <result name="success" >/userlist.jsp</result> </action> <action name="searchuser" class="userAction" method="searchUser"> <result name="success">/userlist.jsp</result> </action> [/code] 相关action的代码 [code="java"] public String searchUser() { try { ActionContext ctx = ActionContext.getContext(); HttpServletRequest request = (HttpServletRequest)ctx.get(ServletActionContext.HTTP_REQUEST); HttpServletResponse response = (HttpServletResponse)ctx.get(ServletActionContext.HTTP_RESPONSE); response.reset(); response.setCharacterEncoding("utf-8"); ComUserInfo comuserinfo = new ComUserInfo(); if (comuserinfo.getUserid() != "") { List result = uo.searchUser(getUserid()); JsonUtil ju = new JsonUtil(); String jsresult = ju.list2json(result); this.userlist = ("{\"totalCount\": 3," + "\"userlist:\" " + jsresult + " }"); System.out.println(userlist); response.getWriter().write(userlist); //response.getWriter().println(userlist); return SUCCESS; } else { ssn.add("errmsg", "User not login yet!"); return ERROR; } } catch (Exception e) { ssn.add("errmsg", e.getMessage()); return ERROR; } } public String redirectUserList(){ return SUCCESS; } [/code] userlist.jsp上的 js 代码: [code="java"] Ext.onReady(function() { Ext.QuickTips.init(); // turn on validation errors beside the field globally // Ext.form.Field.prototype.msgTarget = 'side'; var cm = new Ext.grid.ColumnModel([{ header : '用户ID', dataIndex : 'userId' }, { header : '用户昵称', dataIndex : 'usrName' }, { header : '密码', dataIndex : 'usrPwd' }, { header : '电子邮件地址', dataIndex : 'usrEmail' }, { header : '密码提示问题', dataIndex : 'usrPwdQues' }, { header : '密码提示问题答案', dataIndex : 'usrPwdAns' }]); var reader = new Ext.data.JsonReader({ root : 'userlist', totalProperty: 'totalCount' }, [{ name : 'usrId', mapping : 'userId' }, { name : 'usrName', mapping : 'usrName' }, { name : 'usrPwd', mapping : 'usrPwd' }, { name : 'usrEmail', mapping : 'usrEmail' }, { name : 'usrPwdQues', mapping : 'usrPwdQues' }, { name : 'usrPwdAns', mapping : 'usrPwdAns' }]); var ds = new Ext.data.Store({ proxy : new Ext.data.HttpProxy({ url : 'searchuser.action', method : 'POST' //method : 'GET' }), reader : reader, autoload : true }); // ds.load(); // alert(ds.getCount()) ; //var sm = new Ext.grid.CheckboxSelectionModel(); var grid = new Ext.grid.GridPanel({ store : ds, // sm : sm, cm : cm, loadMask : { msg : ' 数据加载中...' }, autoHeight : true }); var vp = new Ext.Viewport({ layout : "border", frame : true, title : "用户列表", autoHeight : true, items : [{// Viewport region : "north", height : 100, title : "顶部面板" }, { region : "south", height : 50, title : "底部面板" }, { region : "west", width : "20%", title : "左边面板" }, { region : "east", width : "20%", title : "右边面板" }, { region : "center", title : "中央面板", items : [frm = new Ext.FormPanel({ items : [grid] } /* Eof formpanel */) /* Eof border center */] } /* Eof Viewport */] }); grid.render(); vp.render(document.body); }); [/code] action返回的数据如下: {"totalCount": 3,"userlist:" [ {"usrCreateBy":"","usrCreateDate":"","usrDisableDate":"", "usrEmail":"Frankie@together.com","usrId":"80319474","usrName":"Frankie","usrPwd":"1233","usrPwdAns":"1+1","usrPwdQues":"2", "usrRemark":"","usrUpdateBy":"","usrUpdateDate":"" }, {"usrCreateBy":"","usrCreateDate":"","usrDisableDate":"", "usrEmail":"Justin@together.com","usrId":"80334272","usrName":"Justin","usrPwd":"1234","usrPwdAns":"2","usrPwdQues":"1+1", "usrRemark":"nothing","usrUpdateBy":"","usrUpdateDate":"" }, {"usrCreateBy":"","usrCreateDate":"","usrDisableDate":"", "usrEmail":"Justin@together.com","usrId":"sa","usrName":"sysadmin","usrPwd":"a","usrPwdAns":"2","usrPwdQues":"1+1", "usrRemark":"nothing","usrUpdateBy":"","usrUpdateDate":"" } ]} 困扰好几天了,请大家帮忙看看了,谢谢了! [b]问题补充:[/b] 感谢atian25 的回答! 利用你的方法,我已经可以确定json是没有问题了.利用var json={......}; ds.loaddata(json);我可以在GridPanel里看到数据. 但是还是没办法获得searchuser.action返回的数据.我想问题可能出在public String searchUser(){...} 和 var ds = new Ext.data.Store({ proxy : new Ext.data.HttpProxy({ url : 'searchuser.action', method : 'POST' //method : 'GET' }), reader : reader, autoload : true }); 之间.我想请问,我的searchUser()方法和ds是否有问题?比如searchUser()是否一定要用response.getWriter().println(userlist);将数据打印出来,或者ds里的 method : 'POST' or method : 'GET' 会影响? [b]问题补充:[/b] [code="java"][/code][code="java"] public String searchUser() { try { ActionContext ctx = ActionContext.getContext(); HttpServletRequest request = (HttpServletRequest)ctx.get(ServletActionContext.HTTP_REQUEST); HttpServletResponse response = (HttpServletResponse)ctx.get(ServletActionContext.HTTP_RESPONSE); response.reset(); response.setCharacterEncoding("utf-8"); ComUserInfo comuserinfo = new ComUserInfo(); if (comuserinfo.getUserid() != "") { List result = uo.searchUser(getUserid()); JsonUtil ju = new JsonUtil(); String jsresult = ju.list2json(result); this.userlist = ("{\"totalCount\": 3," + "\"userlist:\" " + jsresult + " }"); System.out.println(userlist); response.getWriter().write(userlist); //response.getWriter().println(userlist); return SUCCESS; } else { ssn.add("errmsg", "User not login yet!"); return ERROR; } } catch (Exception e) { ssn.add("errmsg", e.getMessage()); return ERROR; } } public String redirectUserList(){ return SUCCESS; } [/code] 打印出来的数据是: {"totalcount":1,"userlist": [{"usrCreateBy":"","usrCreateDate":"","usrDisableDate":"","usrEmail":"Justin@together.com","usrId":"sa","usrName":"sysadmin","usrPwd":"a","usrPwdAns":"2","usrPwdQues":"1+1","usrRemark":"nothing","usrUpdateBy":"","usrUpdateDate":""}] } 我将此数据放到js中: [code="java"] var json = { "totalcount" : 1, "userlist" : [{ "usrCreateBy" : "", "usrCreateDate" : "", "usrDisableDate" : "", "usrEmail" : "Justin@together.com", "usrId" : "sa", "usrName" : "sysadmin", "usrPwd" : "a", "usrPwdAns" : "2", "usrPwdQues" : "1+1", "usrRemark" : "nothing", "usrUpdateBy" : "", "usrUpdateDate" : "" }] } // ds.load(); ds.loadData(json); [/code] 可以成功显示,但是用ds.load();去获得action返回的时候却失败了.实在搞不明白. [b]问题补充:[/b] 公司没办法装东西,看了下别人的,把代码简化了下,直接给页面打印字符串: [code="java"] public String searchUser() { try { ComUserInfo comuserinfo = new ComUserInfo(); if (comuserinfo.getUserid() != "") { List result = uo.searchUser(getUserid()); String totalcount = tc.intToString(result.size()); JsonUtil ju = new JsonUtil(); String jsresult = ju.list2json(result); setUserlist("{\"totalcount\" : \"1\",\"userlist\" : [{" + "\"usrId\" : \"sa\"," + "\"usrName\" : \"sysadmin\"}]" + "}"); System.out.println(userlist); return SUCCESS; } else { ssn.add("errmsg", "User not login yet!"); return ERROR; } } catch (Exception e) { ssn.add("errmsg", e.getMessage()); return ERROR; } } [/code] js代码: [code="java"] /* * Ext JS Library 3.0 RC2 Copyright(c) 2006-2009, Ext JS, LLC. * licensing@extjs.com * * http://extjs.com/license */ Ext.onReady(function() { Ext.QuickTips.init(); // turn on validation errors beside the field globally // Ext.form.Field.prototype.msgTarget = 'side'; var cm = new Ext.grid.ColumnModel([{ header : '用户ID', dataIndex : 'usrId' }, { header : '用户昵称', dataIndex : 'usrName' }, { header : '密码', dataIndex : 'usrPwd' }, { header : '电子邮件地址', dataIndex : 'usrEmail' }, { header : '密码提示问题', dataIndex : 'usrPwdQues' }, { header : '密码提示问题答案', dataIndex : 'usrPwdAns' }]); var reader = new Ext.data.JsonReader({ root : 'userlist', totalProperty : 'totalcount' }, [{ name : 'usrId', mapping : 'usrId' }, { name : 'usrName', mapping : 'usrName' }, { name : 'usrPwd', mapping : 'usrPwd' }, { name : 'usrEmail', mapping : 'usrEmail' }, { name : 'usrPwdQues', mapping : 'usrPwdQues' }, { name : 'usrPwdAns', mapping : 'usrPwdAns' }]); var ds = new Ext.data.Store({ proxy : new Ext.data.HttpProxy({ url : 'searchuser.action' // method : 'POST' // method : 'GET' }), reader : reader }); // var json ={"totalcount" : "1","userlist" : [{"usrId" : "sa","usrName" : "sysadmin"}]} ds.load(); //ds.loadData(json); alert(ds.getCount()); // var sm = new Ext.grid.CheckboxSelectionModel(); var grid = new Ext.grid.GridPanel({ store : ds, // sm : sm, cm : cm, loadMask : { msg : ' 数据加载中...' }, autoHeight : true }); var vp = new Ext.Viewport({ layout : "border", frame : true, title : "用户列表", autoHeight : true, items : [{// Viewport region : "north", height : 100, title : "顶部面板" }, { region : "south", height : 50, title : "底部面板" }, { region : "west", width : "20%", title : "左边面板" }, { region : "east", width : "20%", title : "右边面板" }, { region : "center", title : "中央面板", items : [frm = new Ext.FormPanel({ items : [grid] } /* Eof formpanel */) /* Eof border center */] } /* Eof Viewport */] }); grid.render(); vp.render(document.body); }); [/code] 直接访问"searchuser.action" 可以得到 {"totalcount" : "1","userlist" : [{"usrId" : "sa","usrName" : "sysadmin"}]} 似乎没有多余数据. [b]问题补充:[/b] 增加一个页面ul.jsp,里面放[code="xml"] <s:property value="userlist" escape="false" /> <s:a href="userlist.jsp">123</s:a>[/code]能获得数据 {"totalcount" : "1","userlist" : [{"usrId" : "sa","usrName" : "sysadmin"}]} js里面修改url [code="java"] var ds = new Ext.data.Store({ proxy : new Ext.data.HttpProxy({ url : 'ul.jsp' }), reader : reader }); [/code] 然后直接点123访问"userlist.jsp" 还是得不到数据. [b]问题补充:[/b] 得到数据了,增加了一个ul.jsp,然后把数据打印给它,在ul.jsp内用javascript [code="java"] ValueStack vs = (ValueStack) request.getAttribute("struts.valueStack"); String userlist = (String) vs.findValue("userlist"); String a = userlist; response.getWriter().write(a); [/code] 获取数据并write, 然后把userlist.jsp的url指向ul.jsp,GridPanel就可以得到数据. 似乎问题出在response上,action里面的数据返回时,并没有把数据放到response里面(action里的 response.getWriter().write(userlist);似乎无效). 例如,ul.jsp是一完全空白页面, [code="java"] public String searchUser() { try { ActionContext ctx = ActionContext.getContext(); HttpServletRequest request = (HttpServletRequest)ctx.get(ServletActionContext.HTTP_REQUEST); HttpServletResponse response = (HttpServletResponse)ctx.get(ServletActionContext.HTTP_RESPONSE); response.reset(); response.setCharacterEncoding("utf-8"); ComUserInfo comuserinfo = new ComUserInfo(); if (comuserinfo.getUserid() != "") { List result = uo.searchUser(getUserid()); String totalcount = tc.intToString(result.size()); JsonUtil ju = new JsonUtil(); String jsresult = ju.list2json(result); this.userlist = ("{\"totalcount\":"+totalcount+",\"userlist\": " + jsresult +" }"); System.out.println(userlist); response.getWriter().write(userlist); return SUCCESS; } else { ssn.add("errmsg", "User not login yet!"); return ERROR; } } catch (Exception e) { ssn.add("errmsg", e.getMessage()); return ERROR; } } [/code] 打印到ul.jsp的数据是空. [b]问题补充:[/b] 这个思路 getuser.jsp -> submit -> redirectuserlist.action -> userlist.jsp -> searchuser.action -> userlist.jsp(GridPanel显示数据) 不知道可行否, "userlist.jsp -> searchuser.action -> userlist.jsp(GridPanel显示数据)" 这里searchuser.action返回的数据userlist.jsp接受不到. [b]问题补充:[/b] 似乎中间一定要有一个页面用于接收数据. 以下方法可以成功在gridPanel上显示数据 searchuser.action->ul.jsp->userlist.jsp(js中url指向ul.jsp) 不明白. 为何 userlist.jsp->searchuser.action->userlist.jsp不行...
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> ```
急..........求解Extjs问题 先谢谢了
tbar : [{ id : 'addDiction', text : '新增', iconCls : 'option', handler : function() { var form =new Ext.form.FormPanel({ layout : 'table', layoutConfig : { columns : 2 }, defaults : { layout:'form' }, items:[ {items: [tdictiontype]}, {items: [ttypename]}, {items: [tcode]}, {items: [tccode]}, {items: [tcname]}, {items: [tdictionno]}, {items: [ttsort]} ],//items url: "/d9inn/diction.do", baseParams: {method: "addDiction"}, method: "post", buttons: [{ text: "新增", handler: function(){ var back = { success: function(f, action){ Ext.Msg.alert("成功", action.result.msg); store.reload(); win.close(); }, failure: function(){ Ext.Msg.alert("错误", "对不起,操作失败,请检查数据是否完整!"); } }; form.getForm().submit(back); } },{ text: "取消", handler: function(){ win.close(); } }] });//FormPanel var win = new Ext.Window({ title: "修改字典信息", id: "edit", width: 500, modal: true, autoHeight: true, items: [form] }); win.show("editEmployee"); } }] 以上是我的部分源码,当我每次重新加载页面之后,第一次点击导航条上的增加按钮时,可以正确弹出页面的,可是我第二次点击增加按钮时fireFox就会出现如下错误信息: Operation is not supported" code: "9 [Break on this error] window.undefined=window.undefined;Ext=...window.attachEvent("onunload",a)}})(); http://localhost:8181/d9inn/js/ext-base.js Line 7 希望各位高手帮我解决下 谢谢!
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载 点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。 ...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
Elastic:菜鸟上手指南
您们好,我是Elastic的刘晓国。如果大家想开始学习Elastic的话,那么这里将是你理想的学习园地。在我的博客几乎涵盖了你想学习的许多方面。在这里,我来讲述一下作为一个菜鸟该如何阅读我的这些博客文章。 我们可以按照如下的步骤来学习: 1)Elasticsearch简介:对Elasticsearch做了一个简单的介绍 2)Elasticsearch中的一些重要概念:cluster, n...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
Java知识体系最强总结(2020版)
更新于2019-12-15 10:38:00 本人从事Java开发已多年,平时有记录问题解决方案和总结知识点的习惯,整理了一些有关Java的知识体系,这不是最终版,会不定期的更新。也算是记录自己在从事编程工作的成长足迹,通过博客可以促进博主与阅读者的共同进步,结交更多志同道合的朋友。特此分享给大家,本人见识有限,写的博客难免有错误或者疏忽的地方,还望各位大佬指点,在此表示感激不尽。 文章目录...
计算机专业的书普遍都这么贵,你们都是怎么获取资源的?
介绍几个可以下载编程电子书籍的网站。 1.Github Github上编程书资源很多,你可以根据类型和语言去搜索。推荐几个热门的: free-programming-books-zh_CN:58K 星的GitHub,编程语言、WEB、函数、大数据、操作系统、在线课程、数据库相关书籍应有尽有,共有几百本。 Go语言高级编程:涵盖CGO,Go汇编语言,RPC实现,Protobuf插件实现,Web框架实...
卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻… 网上资源眼花缭乱,下载的方式也同样千奇百怪,比如 BT 下载,磁力链接,网盘资源等等等等,下个资源可真不容易,不一样的方式要用不同的下载软件,因此某比较有名的 x 雷和某度网盘成了我经常使用的工具。 作为一个没有钱的穷鬼,某度网盘几十 kb 的下载速度让我...
复习一周,京东+百度一面,不小心都拿了Offer
京东和百度一面都问了啥,面试官百般刁难,可惜我全会。
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
一文带你看清 HTTP 所有概念
上一篇文章我们大致讲解了一下 HTTP 的基本特征和使用,大家反响很不错,那么本篇文章我们就来深究一下 HTTP 的特性。我们接着上篇文章没有说完的 HTTP 标头继续来介绍(此篇文章会介绍所有标头的概念,但没有深入底层) HTTP 标头 先来回顾一下 HTTP1.1 标头都有哪几种 HTTP 1.1 的标头主要分为四种,通用标头、实体标头、请求标头、响应标头,现在我们来对这几种标头进行介绍 通用...
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东...
【综合篇】浏览器的工作原理:浏览器幕后揭秘
web(给达达前端加星标,提升前端技能)了解浏览器是如何工作的,能够让你站在更高的角度去理解前端浏览器的发展历程的三大路线,第一是应用程序web化,第二是web应用移动化,第三是web操...
破14亿,Python分析我国存在哪些人口危机!
一、背景 二、爬取数据 三、数据分析 1、总人口 2、男女人口比例 3、人口城镇化 4、人口增长率 5、人口老化(抚养比) 6、各省人口 7、世界人口 四、遇到的问题 遇到的问题 1、数据分页,需要获取从1949-2018年数据,观察到有近20年参数:LAST20,由此推测获取近70年的参数可设置为:LAST70 2、2019年数据没有放上去,可以手动添加上去 3、将数据进行 行列转换 4、列名...
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。 再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。 下文是原回答,希望能对你能有所启发。 如果我说,这个世界上人真的分三六九等,...
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合...
死磕Lambda表达式(二):Lambda的使用
在哪使用Lambda表达式?怎么样正确的使用Lambda表达式?
史上最牛逼的 Eclipse 快捷键,提高开发效率!
如果你在使用IDEA,请参考博主另外的一篇idea快捷键的博客。
在三线城市工作爽吗?
我是一名程序员,从正值青春年华的 24 岁回到三线城市洛阳工作,至今已经 6 年有余。一不小心又暴露了自己的实际年龄,但老读者都知道,我驻颜有术,上次去看房子,业务员肯定地说:“小哥肯定比我小,我今年还不到 24。”我只好强颜欢笑:“你说得对。” 从我拥有记忆到现在进入而立之年,我觉得,我做过最明智的选择有下面三个: 1)高中三年,和一位女同学保持着算不上朋友的冷淡关系;大学半年,把这位女同学追到...
CSS操作之你不得不知的一些小技巧(一)ヾ(Ő∀Ő๑)ノ太棒了!!
目录 CSS单行/多行文本,超出隐藏并显示省略号 1. CSS单行/多行文本,超出隐藏并显示省略号 方法一:使用CSS属性 单行文本溢出显示省略号 width: 100px; overflow: hidden; text-overflow:ellipsis; //文本溢出显示省略号 white-space: nowrap; //文本不会换...
强烈推荐 10 款珍藏的 Chrome 浏览器插件
Firebug 的年代,我是火狐(Mozilla Firefox)浏览器的死忠;但后来不知道为什么,该插件停止了开发,导致我不得不寻求一个新的网页开发工具。那段时间,不少人开始推荐 Chrome 浏览器,我想那就试试吧,期初我觉得用起来很别扭,毕竟我不是一个“喜新厌旧”的人。但用的次数越来越多,也就习惯了。 Chrome 浏览器有一个好处,就是插件极其丰富,只有你想不到的,没有你找不到的,这恐怕是...
我以为我对数据库索引十分了解,直到我遇到了阿里面试官。
索引的数据结构分析,数据库面试到索引最常见的问题分析,我总结了一下。
Java程序员都需要懂的「反射」
前言 只有光头才能变强。 文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y 今天来简单写一下Java的反射。本来没打算写反射这个知识点的,只是不少的读者都问过我:“你的知识点好像缺了反射阿。能不能补一下?” 这周末也有点空了,所以来写写我对反射的简单理解。这篇是入门文章,没有高深的知识点,希望能对新人有帮助。如果...
史上最牛逼的 VSCode 插件,提高开发效率!
这篇文章收集了一些常用的vscode插件,提高开发效率。
Java第二周学习
Java第二周学习 1. 数组 1.1 定义数组格式 数据类型[] 数组名 = new 数据类型[容量]; int[] arr = new int[10]; 赋值左侧 数据类型: 告知编译器,当前数组中能够保存的数据类型到底是什么?并且在确定数据类型之后,整个数组中保存的数据类型无法修改!!! []: 告知编译器这里定义的是一个数组类型数据。 明确告知编译器,数组名是一个【引用数据类型...
有没有简单一点的 Python 小例子或小项目?
分享一波Github上适合新手入门、又十分有趣的Python项目~ 1. 人脸识别 star:30.5k 最简洁的人脸识别库。可以使用Python和命令行工具提取、识别、操作人脸。其人脸识别是基于业内领先的C++开源库dlib中的深度学习模型,用Labeled Faces in the Wild人脸数据集进行测试,准确率高达99.38%。 而且有中文版README哟~ 2. faceai sta...
看完这篇JVM,阿里面试官都不怕!
前言 只有光头才能变强 本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y 学习JVM的目的也很简单: 能够知道JVM是什么,为我们干了什么,具体是怎么干的。能够理解到一些初学时不懂的东西 在面试的时候有谈资 能装逼 (图片来源:https://zhuanlan.zhihu.com/p/25511795,侵删) 声...
隆重向你推荐这 8 个开源 Java 类库
昨天在青铜时代群里看到读者朋友们在讨论 Java 最常用的工具类,我觉得大家推荐的确实都挺常见的,我自己用的频率也蛮高的。恰好我在 programcreek 上看到过一篇类似的文章,就想着梳理一下分享给大家。 在 Java 中,工具类通常用来定义一组执行通用操作的方法。本篇文章将会向大家展示 8 个工具类以及它们最常用的方法,类的排名和方法的排名均来自可靠的数据,从 GitHub 上最受欢迎的 ...
Java基础知识面试题(2020最新版)
文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...
Spring面试题(2020最新版)
文章目录Spring概述(10)什么是spring?Spring框架的设计目标,设计理念,和核心是什么Spring的优缺点是什么?Spring有哪些应用场景Spring由哪些模块组成?Spring 框架中都用到了哪些设计模式?详细讲解一下核心容器(spring context应用上下文) 模块Spring框架中有哪些不同类型的事件Spring 应用程序有哪些不同组件?使用 Spring 有哪些方式...
用树莓派做一个人脸识别开锁应用
作者:eckygao,腾讯 CSIG 云产品部1.案例概述1.1 背景实现一个人脸识别进行开锁的功能,用在他的真人实景游戏业务中。总的来说,需求描述简单,但由于约束比较多,在架构与选型上...
相关热词 c# singleton c#中类的默认值是 c#各种进制之间的转换 c# 正则表达式保留汉字 c#后台跨域 c#基础代码大全 c#指定combox选择 c#关系 mono c# 相差毫秒 用c#做一个简易计算器
立即提问