`

Ext+Struct2 纯OO实现相互交互

    博客分类:
  • 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.pname'},
					{fieldLabel:'数量',name:'p.pnum'},
					{
						fieldLabel:'类别',
						hiddenName:'p.ptype',
						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.pdate'
					},
					{
						fieldLabel:'是否合格',
						hiddenName:'p.pcheck',
						xtype:'combo',
						mode:'local',
						displayField:'check',
						readOnly:true,
						triggerAction:'all',
						value:'合格',
						store:new Ext.data.SimpleStore({
							fields:['check'],
							data:[['合格'],['不合格']]
						})
					}
				]
			})
	},
    submit:function(){},  
	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.fireEvent('submit',this,this.form.getValue());
		}catch(_err){
			return;
		}
	}
});
/*******创建InsertWin*******/
InsertProductWin = Ext.extend(ProductWindows,{
	title:'添加产品'
});
/*******创建UpdateWin*******/
UpdateProductWin = Ext.extend(ProductWindows,{
	load:function(_r){this.form.setValue(_r);},
	title:'修改产品'
});
/*******创建GridPanel*******/
var data = [
	{pname:'GH-2323零件',ptype:'固件',pnum:18,pdate:'2009-7-11 00:00:00',pcheck:'合格'},
	{pname:'8846零件',ptype:'洗件',pnum:20,pdate:'2009-8-20',pcheck:'不合格'}];
var store = new Ext.data.JsonStore({
	data:data,
	url:'data/data.jsp',
	autoLoad:true,
	fields:['pname','ptype','pnum','pdate','pcheck']
});
var cb = new Ext.grid.CheckboxSelectionModel();
var cm = new Ext.grid.ColumnModel([
new Ext.grid.RowNumberer(),
cb,
{dataIndex:'pname',header:'名称',sortable:true},
{dataIndex:'ptype',header:'类别',sortable:true},
{dataIndex:'pnum',header:'数量',sortable:true},
{dataIndex:'pdate',header:'生产日期',sortable:true},
{dataIndex:'pcheck',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);
					},
					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();
//		var a = _sm.getSelections();
//		for (var index = 0; index < a.length; index++) {
//			alert(Ext.util.JSON.encode(a[index].data)+index);
//		}
		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){
		/*创建MyRecord 该记录集不能new 只能实现create方法是Store的一条记录 mapping 只是创建了一个模板可以省略*/
		var MyRecord = Ext.data.Record.create([
    		{name: 'pname', mapping: 'pname'},
    		{name: 'ptype', mapping: 'ptype'},
    		{name: 'pnum', mapping: 'pnum'},
    		{name: 'pdate', mapping: 'pdate'},
    		{name: 'pcheck', mapping: 'pcheck'}
		]);
		/*给记录集MyRecord创建一条真实记录 是Store的一记录*/
		var newrecord = new MyRecord({
   			 pname: _r.get('p.pname'),
    		 ptype: _r.get('p.ptype'),
             pnum: _r.get('p.pnum'),
             pdate: _r.get('p.pdate'),
             pcheck: _r.get('p.pcheck')
     	});
     	//向store里添加一条记录
		this.getStore().add(newrecord);
	},
	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({  
            url:'Productaction_saveUser.action',
            method:'POST',
            success:function(form,action){
             	me.insert(_r);
				_win.form.getForm().reset();
				Ext.MessageBox.confirm('系统提示','添加成功,是否继续!',function(btn){
					if(btn=='no'){
						_win.hide();
					}
				},this);
              },
              failure:function(form,action){msg('系统提示','添加失败请重试!');}
            });  
    }
});


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

java代码为
package com.ysu.action;

import com.ysu.core.BaseAction;
import com.ysu.entity.ProductEntity;

public class ProductAction extends BaseAction {
	private ProductEntity p;


	public ProductEntity getP() {
		return p;
	}

	public void setP(ProductEntity p) {
		this.p = p;
	}

	public String saveUser() {
//		userId = (Integer) userService.saveUser(user);
//		if (userId != null) {
//			success = true;
//		}
		System.out.println("sssss"+super.getRequest().getParameter("p.pname")+"sssssssss");
//		System.out.println("sssss"+pname+"sssssssss");
		System.out.println("sssss-"+p.getPtype()+"---"+p.getPname()+p.getPdate()+p.getPnum()+p.getPcheck()+"-sssssssss");
		System.out.println("这一行输出s-"+p.getPname()+p+"-");
		super.outJsonString("{success:true,msg:'成功加载'}"); 
		return null;
	}
}

structs xml 配置
<?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}"></action>
	</package>

</struts>

javabean代码为
package com.ysu.entity;
import java.io.Serializable;
public class ProductEntity implements Serializable {
	private String pname;
	private String pnum;
	private String pcheck;
	private String pdate;
	private String ptype;
	//省略 get和 set 方法
}

data.jsp的数据为
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
[
{pname:'GH-2323零件',ptype:'固件',pnum:18,pdate:'2009-7-11 00:00:00',pcheck:'合格'},
{pname:'8846零件',ptype:'洗件',pnum:20,pdate:'2009-8-20',pcheck:'不合格'}
]

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics