SSM将后台获取的数据转换成json格式传递到前台页面
2015-01-29 22:46
1011 查看
1、后台从数据库中获取数据,传递到response中
这一步折腾了我一整天,不知道是因为没有传递到response中还是其他的原因,在前台获取的data,使用alert(data)输出的一直为空值或null有两种方式可以实现这一步。一是利用注解@ResponseBody,二是利用PrintWriter。最终我是通过@ResponseBody成功完成了这一步,而不知道为什么利用PrintWriter总是写不成功,具体的原因我后面再研究研究吧。下面来介绍下这两种实现方式:
(1)@ResponseBody,即将方法返回值写到response对象中,代码如下:
<span style="font-family:Comic Sans MS;"> @RequestMapping("/addAction.do") <strong>@ResponseBody//将返回结果写到response中</strong> public String save(HttpServletRequest request,HttpServletResponse response,Model model,@RequestParam(value="photo",required=false)MultipartFile fi ledata) throws IllegalArgumentException, IllegalAccessException{ //PrintWriter out=null; if(filedata!=null&&!filedata.isEmpty()){ //获取图片的文件名 String fileName=filedata.getOriginalFilename(); //获取图片的扩展名 String extensionName=fileName.substring(fileName.lastIndexOf(".")+1); //新的图片名=获取时间戳+"."图片扩展名 String newFileName=String.valueOf(System.currentTimeMillis())+"."+extensionName; System.out.println(picUrl); //将图片上传到服务器 //saveFile(newFileName,filedata); saveFile(fileName,filedata); //将图片名称保存至数据库 //photoService.insert(fileName); } JSONArray jsonArray=new JSONArray(); for(int i=10;i<30;i++){ Photo p=photoService.getPhotoById(new BigDecimal(i)); jsonArray.add(p); } //获取单个json对象 /*JSONObject json=null; Photo p1=photoService.getPhotoById(new BigDecimal(3)); json=JSONObject.fromObject(p1);*/ <strong>return jsonArray.toString();</strong> }</span>
这里我是利用net.sf.json.JSONArray;将从数据库读取的对象转换成了json格式。
说到这里,就要提下,要导入的jar包
要使程序可以运行必须引入JSON-lib包,JSON-lib包同时依赖于以下的JAR包:
<span style="font-family:Comic Sans MS;">commons-lang.jar commons-beanutils.jar commons-collections.jar commons-logging.jar ezmorph.jar json-lib-2.2.2-jdk15.jar</span>
这几个jar包缺一不可,不然会报错。
我的maven中pom.xml文件的配置如下:
<span style="font-family:Comic Sans MS;"> <!-- json依赖的jar包 --> <dependency> <groupId>net.sf.json</groupId> <artifactId>json-lib</artifactId> <version>2.2.2</version> </dependency> <dependency> <groupId>commons-beanutils</groupId> <artifactId>common-beanu</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2.1</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1.1</version> </dependency> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.1</version> </dependency> <dependency> <groupId>ezmorph</groupId> <artifactId>ezmorph</artifactId> <version>1.0.6</version> </dependency></span>
(2) 利用PrintWriter实现如下:
<span style="font-family:Comic Sans MS;"> response.setCharacterEncoding("UTF-8"); response.setHeader("Cache-Control", "no-cache"); response.setContentType("application/json"); PrintWriter out=null; try { out=response.getWriter(); out.print(json.toString()); out.flush(); out.close(); } catch (IOException e) { e.printStackTrace(); }</span>
但是这样一直不成功,具体的原因我还不是很清楚。
2、前台获取获取后台传递的json数据,利用jquery的ajax,代码如下:
<span style="font-family:Comic Sans MS;"> function photo(){ var val; $.ajax({ async:false, type:'get',//get是获取数据,post是带数据的向服务器发送请求 url:'addAction.do', dataType:'json', success:function(data){ val=eval(data);//转换成js对象 alert(val[2].name); alert(data); }, error:function(data){ alert("JSON数据获取失败,请联系管理员!"); } }); }</span>
主要是把ajax的相关参数弄明白,上述获取数据的过程也就清楚了。
3、将json字符串解析为js对象,获取对象的相关值
<span style="font-family:Comic Sans MS;">val=eval(data);//转换成js对象 alert(val[2].name);这一行代码便可以获取对应的name值。</span>
感觉这三步写起来很简单,但是在实现过程中,我还是思考了很久的,主要是第一步的过程一直不行,导致第二步获得的值为空,这里总结下希望以后
不会再在这个地方卡住,通过这个过程,我也明白了SSM前台和后台交互的过程。
相关文章推荐
- 前台js获取到后台json数据,eval解析json后,日期(object)对象转换为date日期格式显示
- 前台序列化传过来的值,后台获取之后封装到map当中,让后在转化成json格式,最后在把json里面的参数里面的某一个值进行分割,最后在存到json格式的数据中去。
- 后台将对象转换为json格式,前台js解析json数据,将字符串转化为数组
- js前台传递json字符串数组到后台有后台转换成list集合或其他格式的问题解决
- java 后台实现ajax post跨域请求传递json格式数据获取json数据问题
- 关于从后台获取数据List<User>转化为JSON格式在前台用easyui以表格显示
- struts2 + ajax(由前台的form提交数据到后台,再根据form所调用返回获取的后台json格式的数据返回到前端,然后前端用jquery对json数据进行解析)==》》涉及文件上传的部分
- springMVC 前台传递json格式数据到后台
- C#将DataSet或DataTable转换成Json格式数据传递到前台JS脚本
- json数据与JAVA数据的转换 jsonJavaBean.netApache 自己编写了一个工具类,处理页面提交json格式数据到后台,再进行处理成JAVA对象数据 1、DTO:Data T
- jsp页面把获取的map数据转换成json格式的数据来使用
- Java后台去除前台传递数据中的页面标签(HTML,Javascript,Style),获取文本内容!
- struts2 + ajax(由前台的form提交数据到后台,再根据form所调用返回获取的后台json格式的数据返回到前端,然后前端用jquery对json数据进行解析)==》》涉及非文件上传的部分
- 【ExtJS实践】之六 :Combobox从后台获取JSON格式的数据
- EXT 中json格式数据后台与前台的交互
- 使用jQuery解析JSON数据(jquery在前台对从后台获取到的json数据进行解析,并进行显示)
- 《项目经验》--后台一般处理程序向前台JS文件传递JSON,JS解析JSON,将数据显示在界面--显示在DropDownList 或 显示在动态创建的table中
- struts2通过后台向前台页面传递数据、对象
- json或json数组从页面到后台的转化或从后台到前台的转换
- JSP中获取ExtJS.Ajax前台传递的JSON数据