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,在线等!!!

解决方案 »

  1.   

    你是不是想在提交成功后刷新gridpanel?
    没明白你啥意思。
      

  2.   


    关键是要把添加的数据提交到 action里,当然也要刷新 gridpanel撒,
      

  3.   


     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();
      

  4.   

    我这个是一个添加窗体,就是在formpanle,各字段输入值,然后提交,如何在action里获取到formpanle输入的值
      

  5.   

     Ext.Ajax.request({
                method: 'POST',
                 //后台路径
                url: 'ShowGrid.aspx',
                //向后台传递参数
                  params: { goods_idParam: goods_id},
                          
               })
      向后台发送个ajax请求,指定你的action和参数,就好了
      

  6.   


     我上面已经说了啊 ,需要前台控件如 textfield 的 name 属性和后台 request.getParamter("这里的名字一样") 应该就可以取到值了
      

  7.   

    var myForm = new Ext.form.FormPanel({
            onSubmit: Ext.emptyFn,
            submit: function() {
                this.getForm().getEl().dom.submit();
            }
        });this.getForm().getEl().dom.submit();
    重点是这句,这是把ext封装的html的form给提交了,这样在后台跟取得一个html form的方法就一样了
      

  8.   

    用struts2,接收提交的数据,看你的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
      

  9.   

    只要你的textfield的name值和struts2中的你设置model一样,就可以取得值。 比如:public class Person{
    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