`

Ext 表单 和 Struct2接受ext表单值的问题

    博客分类:
  • Ext
阅读更多
一个疑惑的问题
该问题已经获得圆满解决

用Ext 作的表单以 p.name 这样的方式提交给 struct2的时候 获取不到值
或者 只能通过 request.getParmter("***")获取ext表单里的值吗?

应该如何配置请大家给一点意见
js 代码如下

/********创建FormPanel*******/
ProductFormPanel = Ext.extend(Ext.form.FormPanel,{
	constructor:function(){
		ProductFormPanel.superclass.constructor.call(this,
			{
				labelWidth:60,
				defaultType:'textfield',
				defaults:{anchor:'90%'},
				baseCls:'x-plain',
				items:[
	{fieldLabel:'名称',name:'p.name'},//    ProductEntuty 里的属性 name
	{fieldLabel:'数量',name:'p.num'},//    ProductEntuty 里的属性 num
	{fieldLabel:'类别',
	 hiddenName:'p.type',//    ProductEntuty 里的属性 type   
         xtype:'combo',
						mode:'local',
						displayField:'type',
						readOnly:true,
						triggerAction:'all',
						value:'洗件',
						store:new Ext.data.SimpleStore({
							fields:['type'],
							data:[['洗件'],['固件']]
						})
					},
					{
						fieldLabel:'生产日期',
						xtype:'datefield',
						format:'Y-m-d G:i:s',
						name:'p.date'                               //    ProductEntuty 里的属性 date
					},
					{
						fieldLabel:'是否合格',
						hiddenName:'p.check',		      //    ProductEntuty 里的属性 date
						xtype:'combo',
						model:'local',
						displayField:'check',
						readOnly:true,
						triggerAction:'all',
						value:'合格',
						store:new Ext.data.SimpleStore({
							fields:['check'],
							data:[['合格'],['不合格']]
						})
					}
				]
			})
	},
	submit:function(){
		//表单服务器的提交方法
		this.getForm().submit({
				url:'Productaction_test.action',
				method:'POST',
				success:function(form,action){msg('fb','b');},
				failure:function(form,action){msg('fa','a');}
			});
	},
	reset:function(){
		this.getForm().reset();
	},
	getValue:function(){
		if(this.getForm().isValid()){
			return new Ext.data.Record(this.getForm().getValues());
		}else{
			throw Error('表单未能通过!');
		}
	},
	setValue:function(_r){
		this.getForm().loadRecord(_r);
		
	}
});
/*******创建Windows*********/
ProductWindows = Ext.extend(Ext.Window,{
	form: new ProductFormPanel(),
	constructor:function(){
		this.form = new ProductFormPanel();
		 ProductWindows.superclass.constructor.call(this,
			{
				plain:true,
				width:300,
				modal:true,
				items:this.form,
				closeAction:'hide',
				buttons:[
				{
					text:'确定',
					handler:this.onSubmitClick,
					scope:this
				},
				{
					text:'取消',
					handler:this.onCancelClick,
					scope:this
				}]
			}
		 );
		 this.addEvents('submit');
	},
	close:function(){
		this.form.reset();
		this.hide();
	},
	onCancelClick:function(){
		this.close();
	},
	onSubmitClick:function(){
		try{
			//调用表单提交服务器的方法
			//this.form.submit();
			
			this.fireEvent('submit',this,this.form.getValue());
                        /*问题出在这个地方了 因为Form的AJAX提交是异步执行的所以浏览器在提交的同时 又把this.form.reset() 方法执行了一遍 搞整整28个小时 后来还PeTiRo网友指出了问题的所在 把this.form.reset();去掉就OK了
谢谢 PTR
this.form.reset();*/
//			this.close();
		}catch(_err){
			alert(_err.message);
			return;
		}
	}
});
/*******创建InsertWin*******/
InsertProductWin = Ext.extend(ProductWindows,{
	title:'添加产品'
});
/*******创建UpdateWin*******/
UpdateProductWin = Ext.extend(ProductWindows,{
	load:function(_r){this.form.setValue(_r);},
	title:'修改产品'
});
/*******创建GridPanel*******/
var data = [
	{name:'GH-2323零件',type:'固件',num:18,date:'2009-7-11 00:00:00',check:'合格'},
	{name:'8846零件',type:'洗件',num:20,date:'2009-8-20',check:'不合格'}];
var store = new Ext.data.JsonStore({
//	data:data,
	url:'data/data.jsp',
	autoLoad:true,
	fields:['name','type','num','date','check']
});
var cb = new Ext.grid.CheckboxSelectionModel();
var cm = new Ext.grid.ColumnModel([
new Ext.grid.RowNumberer(),
cb,
{dataIndex:'name',header:'名称',sortable:true},
{dataIndex:'type',header:'类别',sortable:true},
{dataIndex:'num',header:'数量',sortable:true},
{dataIndex:'date',header:'生产日期',sortable:true},
{dataIndex:'check',header:'是否合格',sortable:true}
]);
ProductGridPanel = Ext.extend(Ext.grid.GridPanel,{
	insertwin:new InsertProductWin(),
	updatewin:new UpdateProductWin(),
	constructor:function(){
		ProductGridPanel.superclass.constructor.call(this,{
			cm:cm,
			region:'center',
			height:500,
			width:'auto',
			store:store,
			border:false,
			stripeRows:true,
			sm:cb,
			title:'测试',
			tbar:[
				{
					text:'添加记录',
					handler:function(){this.insertwin.show();},
					scope:this
				},
				'-',
				{
					text:'修改记录',
					handler:function(){
								try{
									this.updatewin.show();
									this.updatewin.load(this.getSelected());
								}catch(_err){
									msg('系统提示', _err.message);
									this.updatewin.hide();
								}
							},
					scope:this
				},
				'-',
				{
					text:'删除记录',
					handler:function(){
						Ext.MessageBox.confirm('系统提示','您确定要删除所选的信息吗!',this.removePerson,this);
								var a = this.getSelecteds();
								for(var i = 0;i<a.length;i++){
									this.getStore().remove(a[i]);	
								}
							},
					scope:this
				}]
		}),
		this.insertwin.on('submit',this.onInsertWinSubmit,this);
		this.updatewin.on('submit',this.onUpdateWinSubmit,this);
		this.addEvents('rowselect');
	},
	getSelecteds:function(){
		var _sm = this.getSelectionModel();
		return _sm.getSelections();
	},
	getSelected:function(){
			var _sm = this.getSelectionModel();
			var a = _sm.getSelected();
			if(_sm.getCount()==0)
			{
				throw Error('请选择一条记录!');
			}else if(_sm.getCount()>1){
				throw Error('只能选择一条记录!');
			}
			return _sm.getSelected();
	},
	onRowSelect:function(_sel,_index,_r){
			this.fireEvent('rowselect',_r);
	},
	removePerson:function(btn){
			if(btn=='yes'){
				this.remove();
			}
	},
	remove:function(){
		var a = this.getSelecteds();
								for(var i = 0;i<a.length;i++){
									this.getStore().remove(a[i]);	
								}
	},
	insert:function(_r){
		this.getStore().add(_r);
	},
	update:function(_r){
			var st = this.getSelected();
			var data = st.data;
			for(var i in data){
				st.set(i,_r.get(i));
			}
			sr.commit();
	},
	onUpdateWinSubmit:function(_win,_r){
			
			this.update(_r);
	},
	onInsertWinSubmit:function(_win,_r){
var me = this;//这个是大漠帮我搞的 首先感谢大漠穷秋
/*
因为在_win.form.getForm().submit里的执行到success里的function 中调用 this.insert(_r)这里的this
 就是指 _win.form.getForm().submit这个类,所以说这个类里没有insert方法会报错
如果 用me.insert() 的话 就会执行成功
*/
			 _win.form.getForm().submit({  
                url:'Productaction_saveUser.action',
                method:'POST',
                success:function(form,action){
                	msg('fb','b');
                		flag = true;
                		alert(flag);
                		/* 这个写上会说 insert 不是一个function(方法) 为什么呢 
                		this.insert(_r); 
                		*/
			   Ext.MessageBox.confirm('系统提示','添加成功,是否继续!',function(btn){
				if(btn=='no'){
					_win.hide();
				}
			},this);
                },
                failure:function(form,action){msg('fa','a');}
            });  
            
            /*下面这个if为什么不执行了呢  如何能让他执行 */
            if(flag==true){
            	alert('s');
				this.insert(_r);
            }
	}
});


Ext.onReady(function(){
	var grid = new ProductGridPanel();
	var view = new Ext.Viewport({
		renderTo:Ext.getBody(),
		items:[grid]
	});
});


JAVA Struct action 里的代码为
public class ProductAction extends BaseAction {
	public static final String SUCCESS_MANAGER = "success_manager";
	private ProductEntity p;
	
	public ProductEntity getP() {
		return p;
	}
	public void setP(ProductEntity p) {
		this.p = p;
	}

	public String test() throws Exception{
		System.out.println("这一行是可以输出"+getRequest().getParameter("p.type")+"-");
		System.out.println("这一行输出s-"+p.getName()+"-");
		super.outJsonString("{success:true,msg:'成功加载'}");
		return null;
	}}

Struct 配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
	<package name="back" extends="struts-default" namespace="/">
		<global-results>
			<result name="done">result.jsp</result>
		</global-results>
		<action name="*action_*" class="com.ysu.action.{1}Action" method="{2}">
			<!-- 有这个配置的话tomcat起动的时候就会报错
			<result type="json">
				<param name="includeProperties">success</param>
			</result>
			 -->
		</action>
	</package>
</struts>

实体类ProductEntity代码如下
public class ProductEntity implements java.io.Serializable{
	private String name;
	private String num;
	private Date date;
	private String type;
	private String check;
	//省略了它的get和set方法	
}
分享到:
评论
2 楼 peter2009 2009-11-11  
我看bmsh
http://yourgame.iteye.com/blog/252853
这个项目都用的p.name这种方式 可以成功的 我就一直不是很理解
还是 稳妥一些用属性名吧

还有一个问题 就是想提交在服务器端成功后
在到本地执行一下ProductGridPanel的这个方法
insert:function(_r){this.getStore().add(_r);}, 
应该如何弄呀!



1 楼 damoqiongqiu 2009-11-11  
hiddenName与Java类中的属性名应该对应,另外,不要用p.name这种方式,"."是一个运算符,不要用这样的名字  

相关推荐

    ext整合struts2

    Struts2和EXTJS是两种在Web开发中广泛使用的开源技术。Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它极大地简化了Java Web应用程序的开发过程。EXTJS则是一个JavaScript库,用于构建富...

    Ext3.2 + struts 文件上传实例

    要实现文件和参数的共同上传,我们需要在Ext3.2的表单中添加一个`FileInput`组件,然后配置Struts的Action来接收并处理上传请求。在表单提交时,`FileInput`会将选定的文件转换成二进制流,并与其他表单字段一起发送...

    Ext_struts2

    Ext_struts2是一个结合了Ext JS前端框架与Struts2后端MVC框架的整合应用,旨在提升Web应用的用户体验和开发效率。Struts2是一个强大的、基于Java的开源MVC框架,它提供了模型-视图-控制器模式的实现,以帮助开发者...

    ext+struts2

    EXT是一个强大的JavaScript库,它提供了丰富的用户界面组件和交互效果,而Struts2是Java EE平台上的一个MVC框架,用于处理业务逻辑和控制应用程序流程。 在EXT中,文件上传通常通过EXT.form.FileField组件实现,这...

    Ext+Struts2的学生成绩管理系统

    Ext的表单组件可以用于输入成绩,Struts2的Action类接收并处理这些数据,然后更新到数据库。 3. **成绩查询**:学生和教师可以按姓名、班级等方式查询成绩。Ext可以创建动态的查询条件,Struts2处理查询请求,返回...

    ext如何与struts2整合

    ExtJS 是一个用于创建富客户端界面的JavaScript库,而Struts2 是一个基于MVC模式的Java Web框架,两者结合可以提供优秀的用户体验和强大的服务器端管理。 在整合Struts2 和 ExtJS 时,首先需要确保开发环境的兼容性...

    Ext2.0+struts2+spring2.5+ibatis2

    在IT领域,构建高效、可扩展的企业级应用是至关重要的,而"Ext2.0+Struts2+Spring2.5+Ibatis2"的组合就是一种常见的技术栈,用于实现这样的目标。这个技术组合提供了从用户界面到数据访问的全方位解决方案。 **Ext...

    EXT+STRUTS2 经典例子

    EXT 和 Struts2 是两种广泛使用的 Java Web 开发框架,它们在构建动态、交互式的用户界面和处理服务器端业务逻辑方面都有出色的表现。EXT 主要是前端的 JavaScript 框架,提供丰富的组件库和强大的数据绑定功能,而 ...

    Ext+struts+ibatis 完整项目

    总的来说,"Ext+struts+ibatis 完整项目"是一个全面展示Java Web开发流程的实例,涵盖了前端、后端以及数据库操作的各个环节,对于学习和实践这一技术栈的开发者来说,是一个宝贵的参考资料。通过深入研究这个项目,...

    Ext+struts2项目

    4. 表单处理:EXTJS2的表单组件可以与Struts2的表单验证相结合,实现客户端和服务器端的双重验证。 5. 动态加载:EXTJS2的Ajax功能可以实现页面部分内容的异步加载,提升用户体验。 6. 页面布局:EXTJS2的布局管理...

    Ext+Struts2多文件上传

    2. **表单提交**:当用户选择好文件后,可以通过`Ext.Ajax.request`或者`Ext.form.Basic.submit`方法将表单数据发送到服务器。表单数据会封装在一个FormData对象中,方便Struts2处理。 3. **Struts2配置**:在...

    SSI+EXT (Struts2+Spring+Ibatis+Ext)

    这个框架集合了Struts2作为MVC框架,Spring作为依赖注入和事务管理工具,Ibatis作为持久层解决方案,以及Ext JS作为前端用户界面组件库。下面我们将详细探讨这些技术以及它们在项目中的应用。 **1. Struts2** ...

    Struts2+spring2.5+EXT+json实例

    Struts2、Spring2.5、EXT和JSON是四个在Web开发中至关重要的技术,它们共同构建了高效、灵活和可扩展的Web应用程序。这里,我们深入探讨这四个技术及其在实际项目中的应用。 首先,Struts2是一个基于MVC(Model-...

    EXT-desktop+struts2

    5. **安全性考虑**:Struts2 和 EXTJS 结合使用时,需要注意安全问题,如防止 SQL 注入、XSS 攻击等。Struts2 有内置的安全插件,但需要正确配置和使用。EXTJS 在处理用户输入时也需进行适当的验证和编码。 总结,...

    EXT异步提交FORM表单

    ### EXT异步提交FORM表单...通过以上内容,我们不仅了解了EXT异步提交FORM表单的具体实现细节,还深入探讨了其与Struts2/Spring2.5框架的集成方法。这将有助于开发者更好地利用这些技术栈构建高效稳定的Web应用程序。

    ext json struts 完整无错源码

    首先,EXT 提供的组件如表格、面板、表单等可以通过 JSON 数据进行填充,使得数据的展示和交互更加直观。JSON 作为数据交换格式,可以方便地在后端(如 Struts 控制器)与前端(EXT UI)之间传递数据。 Struts 框架...

    一个Struts2+Ext实现增删改查的实例

    Struts2是一个强大的MVC(模型-视图-控制器)框架,它在Java Web开发中广泛应用,用于构建可维护性和可扩展性高的企业级应用程序。ExtJS(现称为Sencha Ext JS)则是一个富客户端JavaScript库,用于创建交互式、数据...

    ext+struts2整合实现登陆

    在IT行业中,Web开发是一个重要的领域,而Struts2和EXT是两个常用的技术框架。本文将详细介绍如何将它们整合以实现一个登录功能。 Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它极大地...

    ext+struts2的集成实例

    本实例主要关注"ext+struts2"的集成,这是一种常见的Java Web开发组合,其中ext是一个强大的JavaScript库,用于构建富客户端应用,而Struts2是基于MVC设计模式的Java Web框架,负责后端业务逻辑处理和页面展示的组织...

    ext与spring、struts2整合的图书管理系统

    这个项目是一个综合性的Web应用程序,它结合了三种主流的Java技术:EXT(一个富客户端JavaScript框架),Spring(一个全面的企业级应用框架)和Struts2(一个MVC框架)。EXT主要用于创建交互性强、用户体验良好的...

Global site tag (gtag.js) - Google Analytics