var window_add_duty = new Ext.Window({
title : '添加职务',
width : 340,
height : 250,
closeAction : 'hide',
autoHeight : true,
modal : true,
resizable : false,
bodyStyle : 'padding:5px 5px 0 0',
items : [new Ext.form.FormPanel({
url : 'duty/addDuty.action',
defaultType : 'textfield',
layout : 'form',
defaults : {
widht : 233,
msgTarget : 'side'
},
border : false,
baseCls : 'x-plain',
anchor : '100%',
labelWidth : 60,
labelAlign : 'right',
items : [{
fieldLabel : '职务名称',
id : 'duty_name',
name : 'duty_name',
allowBlank : false,
maxLength : 20,
width : '233' }, {
fieldLabel : '备注',
xtype : 'textarea',
name : 'duty_re',
maxLenght : 100,
width : 233
}],
buttonAlign : 'right',
minButtonWidth : 60,
buttons : [{
text : '添加',
handler : function(btn) {
var frm = this.ownerCt.form;
if (frm.isValid()) {
btn.disable();
var cnfield = frm.findField('duty_name');
frm.submit({
waitTitle : '请稍后...',
waitMsg : '正在提交表单数据,请稍后...',
success : function(form, action) {
var store = grid_duty.getStore();
var duty = new Duty({
dutyId : action.result.dutyId,
dutyName : cnfield.getValue(),
re : form.findField('duty_re')
.getValue()
});
store.insert(0, [duty]);
window_add_duty.setTitle('[' + frm.getValue()
+ ']添加成功!!');
cnfield.reset();
btn.enable();
},
failure : function() {
Ext.Msg.show({
title : ' 错误提示',
msg : '"' + cnfield.getValue() + '"'
+ '已经存在',
buttons : Ext.Msg.OK,
fn : function() {
cnfield.focus(true);
btn.enable();
},
icon : Ext.Msg.ERROR
});
}
}); }
}
}, {
text : '重置',
handler : function() {
this.ownerCt.form.reset();
}
}, {
text : '取消',
handler : function() {
this.ownerCt.ownerCt.hide();
}
}] })]
});
如何把duty 传递给action呢 ? 这里使用的 是struts2,在线等!!!
没明白你啥意思。
关键是要把添加的数据提交到 action里,当然也要刷新 gridpanel撒,
1. 将参数传入到 action :
需要前台控件如 textfield 的 name 属性和后台 request.getParamter("这里的名字一样") 应该就可以取到值了。
success : function(form, action) {
var store = grid_duty.getStore();
var duty = new Duty({
dutyId : action.result.dutyId,
dutyName : cnfield.getValue(),
re : form.findField('duty_re').getValue()
});
store.insert(0, [duty]);
window_add_duty.setTitle('[' + frm.getValue()+ ']添加成功!!');
cnfield.reset();
btn.enable();
},
你这段代码的意思是不是在后台 action 中将值返回到前台上,然后赋值到 Duty 中,通过 store.inert() 插入到 grid 中? 我看你的代码是这个意思吧。建议你,如果你要插入值的话,你就直接在后台 action 处理代码处添加新的数据,然后返回到前台 success 的时候调用 store.load(); 就可以刷新新的grid 的数据。2. 成功到 success 后,或者 failure 后刷新 gridpanel : store.load();
method: 'POST',
//后台路径
url: 'ShowGrid.aspx',
//向后台传递参数
params: { goods_idParam: goods_id},
})
向后台发送个ajax请求,指定你的action和参数,就好了
我上面已经说了啊 ,需要前台控件如 textfield 的 name 属性和后台 request.getParamter("这里的名字一样") 应该就可以取到值了
onSubmit: Ext.emptyFn,
submit: function() {
this.getForm().getEl().dom.submit();
}
});this.getForm().getEl().dom.submit();
重点是这句,这是把ext封装的html的form给提交了,这样在后台跟取得一个html form的方法就一样了
duty_name duty_re
在你的Action中要有相关的set方法。以上是最麻烦的方法。
简单:你的action定义一duty类
Duty : dutyName,dutyRe,有set、get方法
在你的action中定义Duty对象duty,也要有set、get方法,
而在你的formPanel中定义的name则为
duty.dutyName
duty.dutyRe
这样,action中就直接对号入座了。这部分,建议看下struts2的例子即可,是struts2的入门级东东了 哈
另外在你的action中,不建议出现request、response
private String username;//get,set方法其它的略去}
Extjs 中这样写new Ext.form.textfield{name:'username',其它属性略去}
注意:这样写还要看下你的Action中怎么设置这个model,比如你直接写成:public class AddAction{
private String username}上面的方法就可以,如果你在action中写成这样:private Person person; 那么上面的Ext.form.textfield中的name应该写成:person.username