Ext+Struct2 纯OO实现相互交互

折腾了两天 终于弄明白了是这样一回事

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:'不合格'}
]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值