【问题标题】:Extjs4 - Form submit always returns a failureExtjs4 - 表单提交总是返回失败
【发布时间】:2021-10-24 17:29:58
【问题描述】:

我正在使用ExtJS 4 表单提交一个 excel 文件,但即使请求成功,它也会记录失败。 form.submit 函数期望看到什么?

表格

xtype: 'form',
name: 'upload_form',
items: [{
      text: 'File Upload',
      xtype: 'fileuploadfield',
      name: 'upload_btn',
      buttonOnly: true,
      hideLabel: true,
      allowBlank: false,
      clearOnSubmit: false
}]

控制器

'filter fileuploadfield[name="upload_btn"]': {
            change: this.UploadClick
        }
    ...
    UploadClick: function (vb, s) {
    var controller = this,
        form = controller.getUploadForm();

    if (form.isValid()) {
        form.submit({
            url: '/upload',
            waitMsg: 'Uploading your csv...',
            success: function (fp, o) {
                Ext.Msg.show({
                    title: 'Upload Complete',
                    msg: o.response.responseText,
                    icon: 'save-success',
                    buttons: Ext.Msg.OK
                });
            },
            failure: function (fp, o) {
                Ext.Msg.show({
                    title: 'Upload Error',
                    msg: o.response.responseText,
                    icon: Ext.MessageBox.ERROR,
                    buttons: Ext.Msg.OK
                });
            }
        });
    }
}

Java 返回

Response.ResponseBuilder builder;
...
builder = Response.ok(null);
        return builder.build();

【问题讨论】:

    标签: javascript forms extjs extjs4


    【解决方案1】:

    不要发送null Response ...但应发送JSON 以及适当的内容类型标头:

    String json = "{\"success\": true}";
    return Response.ok(json, MediaType.APPLICATION_JSON).build();
    

    【讨论】:

      【解决方案2】:

      您需要在响应中附加参数success

      例如:

      {
          "success":true, // note this is Boolean, not string
          "msg":"File uploaded"
      }
      

      如文档中所述: https://docs.sencha.com/extjs/4.2.6/#!/api/Ext.form.Basic-method-submit

      【讨论】:

        【解决方案3】:

        就我而言(带有 Ext JS 6.2 的 Spring Boot 应用程序),如果您要返回对象列表,则可以使用包装器。例如,

        而不是做:

        @GetMapping
        public ResponseEntity<List<User>> getUsers() {
            List<User> users = repository.getAll();
            return new ResponseEntity<>(users, HttpStatus.OK);
        }
        

        这样做:

        @GetMapping
        public ResponseEntity<Users> getUsers()
        {
            List<User> users = repository.getAll();
            return new ResponseEntity<>(new Users(users, true), HttpStatus.OK);
        }
        

        Users 类在哪里:

        public class Users
        {
           private List<User> users;
           private boolean success = true;
           public Users(List<User> users, boolean success)
           {
              this.users = users;
              this.success = success;
           }
        
           public List<User> getUser()
           {
              return users;
           }
        
           public void setUser(List<User> users)
           {
              this.users = users;
           }
        
           public boolean isSuccess()
           {
              return success;
           }
        
           public void setSuccess(boolean success)
           {
              this.success = success;
           }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-01-03
          • 2018-05-22
          • 2021-12-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多