`
wsy07
  • 浏览: 28809 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

Extjs4 store load 有中文字符提交后台乱码解决方法

阅读更多

       最看到Exjs4很多改进的相关信息,产生用用看的想法。所以就着手4.x方面的学习。在学习的过程当中发现4.x 相对以前版本存在很多的差别。baidu或谷歌一下有一大堆讲解。 参考一些资料后着手4.x的学习与开发。本人是参照官方MVC例子着手学习的。开发一个基于java后台的增、删、改、查的例子。在做增加、更改、查询时都没有出现乱码情况。以下是增加与更改的ext代码:

Ext.define('W.gzgl.views.common.MenuAddPanel',{
	extend 		: 'Ext.window.Window',
	layout		: 'fit',
    resizable	: true,
	width		: 400,
	height  	: 300,
	title		: '菜单增加',
	closeAction : 'close',
	initComponent : function(){
		this.items = this.buildItems(this);
		this.callParent();
	},
	buildItems  : function(form){
			
		return Ext.create('Ext.form.Panel', {
	        bodyPadding		: 5,
	        border 			: false,
	        waitMsgTarget	: true,
	        fieldDefaults	: {
	            labelAlign	: 'right',
	            labelWidth	: 85,
	            msgTarget	: 'side'
	        },
			bodyStyle 		: "border-bottom: 1px solid #8db2e3;",
	        items: [{
	            xtype		: 'fieldset',
	            title		: '菜单增加',
	            defaultType	: 'textfield',
	            defaults	: {
	                width: 280
	            },
	            items		: [{
	                    fieldLabel	: '菜单序号',
	                    emptyText	: '请输入...',
	                    allowBlank	: false,
	                    name		: 'id'
	                },{
	                    fieldLabel	: '菜单名',
	                    emptyText	: '请输入...',
	                    allowBlank	: false,
	                    name		: 'name'
	                }, {
	                    fieldLabel	: '加载组件名',
	                    emptyText	: '请输入...',
	                    name		: 'componetName'
	                }, {
	                    fieldLabel	: '样式',
	                    name		: 'iconCls'
	                }, /*{
	                    fieldLabel	: '父菜单',
	                    name		: 'parentId'
	                    
	                }*/
	                Ext.create('W.gzgl.componet.common.select.MenuSelect',{
	                	fieldLabel	: '父菜单',
	                	name		: 'parentId'
	                })
	                ,{
	                    xtype		: 'radiogroup',
		                fieldLabel	: '是否叶子',
		                defaults	: {
		                    name	: 'leaf'
		                },
		                items		: [{
		                	//checked		: true,
		                    inputValue	: 'true',
		                    boxLabel	: '是'
		                }, {
		                    inputValue	: 'false',
		                    boxLabel	: '否'
		                }]
	                },{
		                xtype		: 'radiogroup',
		                fieldLabel	: '是否启用',
		                defaults	: {
		                    name: 'visible'
		                },
		                items		: [{
		                	//checked		: true,
		                    inputValue	: 'true',
		                    boxLabel	: '启用'
		                }, {
		                    inputValue	: 'false',
		                    boxLabel	: '不启用'
		                }]
		            }
	            ]
	        }],
	
	        buttons: [{
	            text	: '重 置',
	            handler	: function(){
	               /* formPanel.getForm().load({
	                    url		: 'xml-form-data.xml',
	                    waitMsg	: 'Loading...'
	                });*/
	            	this.up('form').getForm().reset();
	            }
	        }, {
	            text		: '保 存',
	            disabled	: true,
	            formBind	: true,
	            iconCls		: 'icon-delete',
	            handler		: function(){
	            	var actionUrl = form.actionType === 'create' ? 'manager/menuCreate.hs' : 'manager/menuUpdate.hs';
	                this.up('form').getForm().submit({
	                	method			: 'post',
	                    url				: actionUrl,
	                    submitEmptyText	: false,
	                    waitMsg			: '数据保存中...',
	                    success 		: function(response){
	                    	Ext.getCmp(form.gridName).getStore().load();
	                    	form.close();
	                    },
	                    failure			: function(){
	                    	
	                    }
	                });
	            }
	        }]
	    });
	}
});

  以下是数据源的定义:

Ext.define('W.gzgl.stores.common.MenuStore', {
    extend    : 'Ext.data.Store',
    pageSize  : 20,
    requires  : ['W.gzgl.models.common.MenuModel'],
    model     : 'W.gzgl.models.common.MenuModel',    
    autoDestroy: true,
    autoLoad 	: true,
    proxy : {
    	type 	: 'ajax',
    	url  	: 'manager/menuList.hs',
    	reader	: {
            type		: 'json',
            root		: 'rows',
            idProperty	: 'name'
        }
    }
});

 从代码上分析是没有存在什么问题。工程或环境的编码也都为"utf-8"。

也从网络找了一些解决方法。

一、在load提交时对字符串进行decode处理。

{name : encodeURIComponent(value)}

 

然后在后端进行反编码

 

java.net.URLDecoder.decode(name, "utf-8");

 

根据这一做法确实可以解决这一问题。但是综合比较后个人认认为这不是一个很好的解决方法。这一做法就是每一个参数都需要重复上述步骤。比较烦。在对from提交与store提交对比后发现load提交默认为“get”.参考相应说明后。在数据源定义中更改method为"post".即可解决store带中文提交乱码问题。

更改后的代码:

Ext.define('W.gzgl.stores.common.MenuStore', {
    extend    : 'Ext.data.Store',
    pageSize  : 20,
    requires  : ['W.gzgl.models.common.MenuModel'],
    model     : 'W.gzgl.models.common.MenuModel',    
    autoDestroy: true,
    autoLoad 	: true,
    proxy : {
    	type 	: 'ajax',
    	url  	: 'manager/menuList.hs',
    	actionMethods: {
    		read: 'POST'
		},
    	reader	: {
            type		: 'json',
            root		: 'rows',
            idProperty	: 'name'
        }
    }
});

 

分享到:
评论
5 楼 luhouxiang 2015-05-12  
这个方案好,否则一个一个参数搞定的话会很麻烦
4 楼 s332401890 2014-02-18  
谢谢分享!!!!!!!!!!
3 楼 wudith 2013-07-30  
好资料,我也遇到这个问题
2 楼 elgs 2013-04-19  
Thank you!
1 楼 oscarzhangke 2012-08-22  
  谢谢 顶一个 解决我的问题了

相关推荐

    extjs 前后台交互参数出现中文乱码问题的解决方法

    ### extjs前后台交互参数出现中文乱码问题的解决方法 #### 问题背景与原因分析 在使用MyEclipse开发工具进行Web应用开发时,尤其是采用ExtJS框架结合Ajax技术进行前后端数据交互的过程中,可能会遇到一个常见的...

    ExtJs中Store加载(load)时候提示信息

    除了上述操作外,`store.load()`方法还支持其他参数,如`params`、`callback`、`scope`和`add`等,用于更精细地控制数据加载行为。 - **params**:可以传递自定义的请求参数,例如分页参数`start`和`limit`。 - **...

    Extjs4的FormPanel从后台load json数据的要点

    通过以上内容的介绍,我们可以了解到在Extjs4中如何利用`form.load()`方法实现从后台加载JSON数据,并将其映射到表单字段中显示的过程。这不仅有助于提高开发效率,还能增强应用程序的灵活性。希望本文能够帮助您更...

    Extjs4后台框架

    这个“Extjs4后台框架”可能指的是一个特定的、与ExtJS4集成的后端解决方案,用于支持前端应用的数据交互和管理。让我们深入探讨一下ExtJS4及其相关的后台开发概念。 首先,ExtJS4提供了丰富的组件库,包括表格、...

    storebar extjs通过store实现toolbar

    本篇文章将深入探讨如何利用`Store`来实现`Toolbar`的功能,即所谓的`Storebar`,这在EXTJS开发中是一种高效且灵活的数据驱动UI设计方法。 首先,我们要理解`Store`的概念。`Store`是EXTJS中的一个关键组件,它负责...

    extjs_php向后台提交json_post的接收方法实例

    在ExtJS中,我们可以使用`Ext.Ajax.request`或FormPanel的`submit`方法来发送POST请求。例如: ```javascript Ext.Ajax.request({ url: 'post.php', method: 'POST', params: { data: Ext.encode({key1: 'value...

    extjs4 对各类型store各种数据的读取 model 前台 等等

    根据提供的文件信息,本文将详细解析ExtJS 4中如何处理不同类型的Store及与之相关的数据操作、模型定义以及前端展示等内容。 ### ExtJS 4中的Store与数据管理 #### Store概念简介 在ExtJS 4中,Store是用于存储...

    Extjs4+MVC+struts2后台管理系统

    ExtJS4是一个强大的JavaScript库,专门用于构建富客户端的Web应用程序。...总的来说,"Extjs4+MVC+struts2后台管理系统"结合了现代前端技术与成熟的后端框架,提供了一种高效、可扩展的解决方案来构建企业级的Web应用。

    Extjs4学习指南源代码(JAVA后台)

    个人《Extjs4学习指南》电子文档过程中整理的Myeclipse工程,有以下修改:1、数据库改为Mysql;2、前四章后台改为servlet;3、最后一章后台改为SSH架构。 使用说明:1、BeginExtjs4目录为前四章的例子代码;2、SSH_...

    extJs3升级extjs4方案

    ExtJS3 升级到 ExtJS4 方案 ExtJS3 升级到 ExtJS4 需要修改大量代码,主要是因为 ExtJS4 配备了一类新的系统,不向后兼容。在 ExtJS 3 里生成表的几个框架组件,ExtJS4 大多生成 div,这使得 CSS classes 将会失败...

    EXTJS4自学手册

    EXTJS4自学手册——EXT数据结构组件(store) 三、Extjs布局 EXTJS4自学手册——EXT容器布局(Auto,Anchor,Absolute,Hbox) EXTJS4自学手册——EXT容器布局(Vbox,Accordion,Table,Column) EXTJS4自学手册——EXT...

    Extjs4下的STOREMENU

    在ExtJS 4中,STOREMENU 是一种特定的功能,它将数据存储(Store)与菜单(Menu)相结合,提供了一种动态创建菜单项的方法,这些菜单项可以根据存储的数据进行更新。这种功能在需要根据用户权限或实时数据动态展示...

    extjs4中文文档

    EXTJS4中文文档详细介绍了每个组件的配置选项、事件、方法以及使用示例,对于初学者来说是一份宝贵的参考资料。通过学习这份文档,开发者可以掌握EXTJS4的基本用法和高级技巧,从而高效地开发出功能丰富的Web应用。...

    ExtJs 4 API中文

    ExtJs 4 API 中文

    extjs和数据库的后台交互

    4. **Model和Store**:在ExtJS中,Model定义了数据的结构和行为,Store则负责管理一组Model实例,提供数据加载、排序、过滤等功能。开发者可以配置Store的proxy属性,指定与后台交互的方式,比如设置为`Ext.data....

    ExtJS4中文教程2 开发笔记 chm

    JQuery AJAX提交中文乱码的解决方案 Jquery css函数用法 JQuery中getJSON的使用方法 Jquery中显示隐藏的实现代码分析 JQuery全选功能的实现 JQuery特效——下拉菜单 JQuery系列教程之XPath选择符 JQuery系列教程之...

    extJS4升级至extJS6.6所遇问题及解决方案

    项目进行前端框架升级——extJS 4升级至extJS6.6所遇的一些问题及相对应的解决方案建议

    extjs表单验证特殊字符

    EXTJS提供了一种强大的方式来实现客户端验证,这可以帮助开发者在用户提交数据前检查输入的有效性,从而减少服务器端的压力并提高用户体验。本文将深入探讨EXTJS中的表单验证,特别是针对特殊字符的验证。 EXTJS...

    extjs后台交互完整示例

    同时,Controller层则负责处理用户交互和数据更新,触发Store的load或sync方法来与后台交互。 "webapp"可能是一个Web应用程序的根目录,包含了HTML、CSS和JavaScript文件,以及可能的配置文件。在这里,我们通常会...

    ExtJS笔记---Grid实现后台分页

    这篇“ExtJS笔记——Grid实现后台分页”探讨了如何在ExtJS的Grid组件中实现高效的后台分页功能。 后台分页是一种常见的数据处理策略,特别是在大数据量的情况下,它将数据分批加载,避免一次性加载所有记录导致的...

Global site tag (gtag.js) - Google Analytics