zoukankan      html  css  js  c++  java
  • mongodb基础系列——数据库查询数据返回前台JSP(二)

    上篇博客论述了,数据库查询数据返回前台JSP。博客中主要使用Ajax调用来显示JSON串,来获取其中某一个字段,赋给界面中的某一个控件。

    那这篇博客中,我们讲解,把后台List传递JSP展示。

    List传递界面,以前我们普通的做法是怎么样的呢?foreach 的el表达式?还是java代码?

    那对于本身就是Json格式的list,到底如何显示呢?

    显然表单中的el表单以及java代码不合适。那我们继续使用Ajax来显示。

    一:对于不使用前台框架的情况:就是咱们普通的table,到底如何以表格的形式显示list呢?

    OK,方案如下:动态生成表格。

    js代码如下:demo中使用某个按钮触发,当然可以在body初始化$(function(){//动态生成表格});各自所需哈。

    我把table嵌套在div中:

    <body>
    	<input type="button" value="用ajax测试具体数据" onclick="testajax()" />
    	<div id="testtable"></div>
       </body>

    testajax() js如下:

     

    	function testajax() {
    		var _url = "http://localhost:8080/testmongodb/mongodb/";
    		jQuery.ajax({
    			url : _url,
    			type : "get",
    			dataType : "json",
    			success : function(d) {
    			    alert(JSON.stringify(d));
    		        	//动态生成table
    			    var mongotable=$("<table border="1"></table>");
    			    mongotable.appendTo("#testtable"); 
    			   for(var o in d){
    					//生成tr,添加到table中
    					var tr=$("<tr></tr>");
    		                        tr.appendTo(mongotable);
    					//生成td
    					var td_id=$("<td width="150">"+d[o].id+"</td>");
    					var td_name=$("<td width="150">"+d[o].name+"</td>");
    					var td_city=$("<td width="150">"+d[o].address.city+"</td>");
    					var td_code=$("<td width="150">"+d[o].address.code+"</td>");
    					
    					//把td添加到tr中
    					td_id.appendTo(tr);
    					td_name.appendTo(tr);
    					td_city.appendTo(tr);
    					td_code.appendTo(tr);
    				}
    				alert($("#testtable").html());
    			}
    		});
    	}

    至于样式,大家可以根据自己需求在js添加哈。

    后台的list如下:

     

    [{ "_id" : { "$oid" : "52564aa6b16b9c6f728c0cf8"} , "id" : 1 , "name" : "小明" , "address" : { "city" : "beijing" , "code" : "065000"}}, { "_id" : { "$oid" : "52566683b16be14866e9bdc5"} , "id" : 2 , "name" : "小红" , "address" : { "city" : "beijing" , "code" : "065000"}}]

    页面如下:

    二:使用前台框架:举例,ligerui中的grid展示:(前提:把js、css已经引入)

    grid代码如下:

     

    	$(function() {
    		 $("#test").ligerGrid({
    			 columns:[ 
    				{display:'id',name:'id','200'},
    				{display:'名称',name:'name','200'},
    				{display:'城市',name:'address.city','250'},
    				{display:'邮编',name:'address.code','250'}
    				],
    			 rownumbers : true,
    			 '80%',
    			 height:'150',
    			 url:'http://localhost:8080/testmongodb/mongodb/'
    		 });
    	});

    其中的test是div的id:

     

    <body>
    	<input type="button" value="用ajax测试具体数据" onclick="testajax()" />
    	<!-- 测试grid,多行数据 -->
    	<div id="test"></div>	
        </body>

    但是你会发现,即使后台显示数据,但是grid竟然无法显示。为啥呢?

    那肯定是grid显示数据源格式与给出的json的list格式不匹配。

    这是ligerui中grid的特有的,看相应的api会发现,grid的数据源data默认的数据格式,是{Rows:[]}

    但是咱们后台的List格式如下:

     

    [{ "_id" : { "$oid" : "52564aa6b16b9c6f728c0cf8"} , "id" : 1 , "name" : "小明" , "address" : { "city" : "beijing" , "code" : "065000"}}, { "_id" : { "$oid" : "52566683b16be14866e9bdc5"} , "id" : 2 , "name" : "小红" , "address" : { "city" : "beijing" , "code" : "065000"}}]
    

    那只要在前面加上Rows:即可,在js模拟此data

     

    var data={Rows:[{"_id":{"inc":1921780984,"machine":-1318347665,"new":false,"time":1381386918000,"timeSecond":1381386918},"id":1,"name":"小明","address":{"city":"beijing","code":"065000"}},{"_id":{"inc":1726594501,"machine":-1318330040,"new":false,"time":1381394051000,"timeSecond":1381394051},"id":2,"name":"小红","address":{"city":"beijing","code":"065000"}}]}
    	$(function() {
    		 $("#test").ligerGrid({
    			 columns:[ 
    				{display:'id',name:'id','200'},
    				{display:'名称',name:'name','200'},
    				{display:'城市',name:'address.city','250'},
    				{display:'邮编',name:'address.code','250'}
    					],
    			 rownumbers : true,
    			 '80%',
    			 height:'150',
    			 data:data
    			// url:'http://localhost:8080/testmongodb/mongodb/'
    		 });
    	});

    结果如下:

    当然可以获取data,然后在此基础上拼串{Rows:[]}

    当然也可以在返回前台Response中,拼接Rows

     

    package com.mongo.servlet;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import net.sf.json.JSONArray;
    import net.sf.json.JSONObject;
    import com.mongo.dao.EntityTest;
    public class EntityServlet extends HttpServlet {
    
    	@Override
    	protected void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		System.out.println("doget.....");
    		try {
    			List list=new EntityTest().selectAll();
    	        	response.setCharacterEncoding("UTF-8");
    	              //主要用于ligerui的grid形式,默认是rows
    			initJsonList(request,response,list);
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		
    	}
    	@Override
    	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
    			throws ServletException, IOException {
    		// TODO Auto-generated method stub
    		doGet(req, resp);
    	}
    	protected void initJsonList(HttpServletRequest request,
    		HttpServletResponse response, List list) {
    		Map map = new HashMap();
    		map.put("Rows", list);
    		JSONObject jsonObject = JSONObject.fromObject(map);
    		try {
    			response.setCharacterEncoding("utf-8");
    			response.getWriter().write(jsonObject.toString());
    			System.out.println(jsonObject);
    		} catch (IOException e) {
    			System.out.println(e.toString());
    		}
    	}
    }
    

    使用JSONObject对象进行转化。

    对于其他非ligerui的展示,其实不必使用JSONObject或JSONArray进行转换,因为本身就是JSON格式。

    当然转换也是没有坏处的,只不过转化后格式所有不同而已,但是不影响,因为用户的属性是不会改变的,影响的是mogodb中特有的_id的属性。

     

    {"Rows":[{"_id":{"inc":1921780984,"machine":-1318347665,"new":false,"time":1381386918000,"timeSecond":1381386918},"id":1,"name":"小明","address":{"city":"beijing","code":"065000"}},{"_id":{"inc":1726594501,"machine":-1318330040,"new":false,"time":1381394051000,"timeSecond":1381394051},"id":2,"name":"小红","address":{"city":"beijing","code":"065000"}}]}
    

    OK,到此为止,某一个字段以及表格形式的基本功能实现方式已经叙述。

    这两篇博客的项目,是用一个项目,只不过各种方式演示,通过注释来完成。

    在此提示:若非ligerui,直接使用数组形式而已[],不要使用Rows:[]格式。但是对于其他的框架,比如ext,easyui,他们都有自己的数据源格式,但是肯定的是,后台依然是JSON串。

    项目Demo,点我下载

  • 相关阅读:
    关于学习netty的两个完整服务器客户端范例
    android-betterpickers
    ValueBar
    CircleDisplay
    JellyViewPager
    十天学习PHP之第二天
    android-測试so动态库(九)
    实习题
    android 编程小技巧(持续中)
    Codeforces Round #253 (Div. 2)——Borya and Hanabi
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3367720.html
Copyright © 2011-2022 走看看