如何使用extjs4在formPanel字段旁边显示服务器端验证错误?

如何使用extjs4在formPanel字段旁边显示服务器端验证错误?,extjs4,extjs-mvc,server-side-validation,Extjs4,Extjs Mvc,Server Side Validation,我正在尝试使用Extjs4将类字段与视图字段绑定。在某种程度上,我可以提交表单并返回结果,但不确定如果验证失败,如何在相应字段旁边显示任何错误消息。我想直接将这些字段绑定到我的类,就像我们对SpringMVC所做的那样,例如-bindingResults.rejectValuecurrentPassword,currentPassword.Error,Password is Error;它会显示在视图中 我的formPanel: { xtype : 'formpanel',

我正在尝试使用Extjs4将类字段与视图字段绑定。在某种程度上,我可以提交表单并返回结果,但不确定如果验证失败,如何在相应字段旁边显示任何错误消息。我想直接将这些字段绑定到我的类,就像我们对SpringMVC所做的那样,例如-bindingResults.rejectValuecurrentPassword,currentPassword.Error,Password is Error;它会显示在视图中

我的formPanel:

{   
    xtype : 'formpanel',
    url: 'changePassword', 
    id : 'changePasswordForm', 
    method: 'POST',
    success: function(){}, 
    items : [{ 
        xtype : 'fieldset',
        id : 'passwordChange',
        title : 'Change Password',
        iconCls : 'user',
        items : [{
                xtype : 'passwordfield',
                label : 'Current Password',
                name : 'currentPassword',
                id : 'currentPassword',             
            }, {
                xtype : 'passwordfield',
                label : 'New Password'
                name : 'newPassword1',
                id : 'newPassword1',
            }, {
                xtype : 'passwordfield',
                label : 'Repeat Password',
                name : 'newPassword2',
                id : 'newPassword2',
            },]
        } ]
    },{
        xtype : 'button',
        id: 'changePassword',
    }
单击按钮时执行提交事件的控制器-

this.getChangePasswordForm().submit();
我的班级是

@RequestMapping(value = "/changePassword", method = RequestMethod.POST)
public @ResponseBody String changePasswordInSettings(ChangePasswordForm changePasswordForm) {
    User currentUser = User.find();     

    String enteredPSHash = HashUtil
    .generateHash(changePasswordForm.getCurrentPassword(),
    currentUser.getEmail());    

    String existingPSHash = currentUser.getPassword();  

    if(!enteredPSHash.equals(existingPSHash)) {
        //bindingResults.rejectValue("currentPassword",
        //"currentPassword.incorrect", "Password is incorrect"); 
    } 
    if (!changePasswordForm.getNewPassword1().equals(changePasswordForm.getNewPassword2())) { 
        //bindingResults.rejectValue("newPassword2",
        //  "newPassword2.dontMatch", "Passwords dont match");
    }
    //if (!bindingResults.hasErrors()) { 
        String newPSHash = HashUtil.generateHash(changePasswordForm.getNewPassword1(),currentUser.getEmail()); 
        currentUser.setPassword(newPSHash); 
        //model.addAttribute("successful", new Boolean(true));      //}
    return "success";
}

如何在我的视图中显示错误消息?

谢谢您提出这个问题。我不知道这个特性,但是表单组件可以配置一个errorReader,请参见 此功能的一个工作示例可帮助您进行设置:
谢谢你提出这个问题。我不知道这个特性,但是表单组件可以配置一个errorReader,请参见 此功能的一个工作示例可帮助您进行设置:

我的Ext.form.Panel带有:

id: 'any-id',
conroller: 'controller-id',
items: [
        {
            fieldLabel: 'Field1',
            name: 'field1',
        },
        {
            fieldLabel: 'Field2',
            name: 'field2',
        }
    ],

    buttons: [
        {
            text:'Click Me',
            itemId: 'buttonId',
            handler: 'onButtonClick'
        }
    ]
在控制器id中:

onButtonClick: function(button) {
    var window = Ext.getCmp('any-id');    
    Ext.Ajax.request({
                url: 'url',
                method : "POST",
                headers: {
                    'Content-Type': 'application/json'
                },
                jsonData: window.getForm().getValues(),
                useDefaultXhrHeader : false,
                withCredentials: false,
                success : function(form, action) {
                   var response = Ext.JSON.decode(form.responseText);
                   var puke = response.status.puke;

                   for (var key in puke) {
                       form.findField(key).markInvalid(puke[key]);
                   }
                }
    }
}
和来自服务器的json:

{
  "status" : {
    "code" : 100,
    "message" : "Validation error."
    "puke" : [{"field1:", "Error message."}, {"field2:", "Another error message."}]
  }
}

我的Ext.form.Panel带有:

id: 'any-id',
conroller: 'controller-id',
items: [
        {
            fieldLabel: 'Field1',
            name: 'field1',
        },
        {
            fieldLabel: 'Field2',
            name: 'field2',
        }
    ],

    buttons: [
        {
            text:'Click Me',
            itemId: 'buttonId',
            handler: 'onButtonClick'
        }
    ]
在控制器id中:

onButtonClick: function(button) {
    var window = Ext.getCmp('any-id');    
    Ext.Ajax.request({
                url: 'url',
                method : "POST",
                headers: {
                    'Content-Type': 'application/json'
                },
                jsonData: window.getForm().getValues(),
                useDefaultXhrHeader : false,
                withCredentials: false,
                success : function(form, action) {
                   var response = Ext.JSON.decode(form.responseText);
                   var puke = response.status.puke;

                   for (var key in puke) {
                       form.findField(key).markInvalid(puke[key]);
                   }
                }
    }
}
和来自服务器的json:

{
  "status" : {
    "code" : 100,
    "message" : "Validation error."
    "puke" : [{"field1:", "Error message."}, {"field2:", "Another error message."}]
  }
}

请在代码中添加一些说明,说明它的功能和帮助方式请在代码中添加一些说明,说明它的功能和帮助方式