Spring MVC 将来自服务器的响应(JSON对象)转换为extjs中的字符串

aoyhnmkz  于 2022-11-14  发布在  Spring
关注(0)|答案(3)|浏览(135)
  • 在我们的代码中,Ext JS页面的参数被传递到Spring 3控制器,在那里我们有业务逻辑。然后在控制器中,使用getWriter设置响应对象。在Ext JS页面中检索写入和响应。问题:在解码响应时,Firebug显示了一个使用Ext.util.JSON.decode的错误,所以我们不得不使用Ext.decode来解码来自服务器的响应。但是Ext.decode给出了一个值:object对象。我需要将其转换为String或格式。控制器代码:
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping
public class SampleController {

    @RequestMapping(value = "/login.htm",method = RequestMethod.POST)
     @ResponseBody
     public void validateCredentials(@RequestParam("user") String user,
            @RequestParam("password") String password,HttpServletResponse response) {
        boolean flag = false;
        String resultString = null;



        try {
            response.setContentType("application/json");
            response.setHeader("Content-Type", "text/html, charset=utf-8");

            if (user.equals(password)) {

                flag = true;
                resultString = "{success:true}";
            } else {

                flag = false;
                resultString = "{success:false}";
            }

            response.getWriter().write(resultString);

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}
Ext JS Login form :
Ext.onReady(function(){

    function submit(button,event){

               var uname=Ext.getCmp('user').getValue();
             alert("1"+uname);
                var passWord=Ext.getCmp('password').getValue();

             Ext.Ajax.request({
                   url: 'login.htm',
                   method :'POST',

                   params: {
                       user:uname,
                       password:passWord
                    },
                   success: function(result,request) {
                      var jresp = Ext.JSON.decode(result.responseText); 
//Ext.JSON.decode stores object Object in jresp. Our requirement is converting jresp to String or boolean
                      console.log('Success'+jresp); 


                   },
                   failure: function(response, request) {
                       var jresp = Ext.JSON.decode(result.responseText);
                       console.log(jresp.error);
                      console.log('server-side failure with status code 8 ' + response.status);
                   }
                });



           }



     var myform = new Ext.form.FormPanel({
            title:'Login form',
            frame:true,
            width:400,
            height: 250, 

            url:'login.htm',
            method:'POST',
            renderTo:'div1',
            items:[
                   {
                       xtype:'textfield',
                       fieldLabel:'user',
                       inputType:'user',
                       allowBlank:false,
                       minLengthText:'3',
                       id:'user',
                       name:'user'
                   },
                   {
                       xtype:'textfield',
                       fieldLabel:'password',
                       inputType:'password',
                       allowBlank:false,
                       minLengthText:'3',
                       id:'password',
                       name:'password'
                   }
                   ],
                   buttonAlign:'center',
                   buttons:[
                            {
                                text:'reset',handler:function(){myform.getForm().reset();}
                            },
                            {

                                text:'Login',
                                handler: submit
                            }

                            ]       

                   });




});
wj8zmpe1

wj8zmpe11#

在解码响应时,Firebug在使用Ext.util.JSON.decode时显示了一个错误,因此我们不得不使用Ext.decode来解码来自服务器的响应。
您之所以会得到错误,是因为您在ExtJS 4中使用了错误对象Ext.JSON.decode来编码数据,而不是Ext.util.JSON.decode,您之所以会有这种困惑,是因为ExtJS 3使用Ext.util.JSON.decode来解析JSON字符串,但是,是,故障保护方法是使用Ext.decode,这是ExtJS 3和ExtJS 4中正确函数简写
但是Ext.decode给出了一个值:object对象。我需要将其转换为String或格式
这是真,因为您生成的响应类似于"{success:true}",所以当您解析JSON字符串时,您将得到如下所示的结果
数据={'成功':真};
因此您可以使用data.success来获取布尔值
因此最终代码如下所示

var jresp = Ext.JSON.decode(result.responseText); 
console.log('Success'+jresp.success);

还有一件事,你正在生成响应在springmvc使用这个字符串
如果您的请求成功,则返回一个错误消息。
这不是一个有效的json字符串,所以你需要用双引号括起对象的key,如下所示
结果字符串=“{\“成功":真}";

mfpqipee

mfpqipee2#

为什么不通过一个Model示例把你需要的所有字段都包含在javascript(ExtJs)中,你就可以用Jackson把你的模型转换成JSON。
只需在appContext中声明转换器即可:
包括Jackson瓶。
您也可以将成功和消息放在模型中,为了简单起见,使用一个带有成功和消息字段的抽象ExtJsModel,并使您的所有模型都扩展同一个模型。

yfwxisqw

yfwxisqw3#

你可以把这样的响应发送给extjs,然后使用extjs解码器,下面是代码。
如果您有任何问题,请使用以下代码:控制台日志(jresp成功);
“""{成功:真}""”
如果你这样控制台。console.log('Success'+jresp.成功);
java-script总是给予对象。所以不要使用它。

相关问题