<script type="text/javascript">
Ext.onReady(function(){

var ds = new Ext.data.Store({
  proxy: new Ext.data.HttpProxy({url:'/LookServlet'}),
  reader: new Ext.data.JsonReader({
   totalProperty:'totalProperty',
   root:'root'},
   [
   {name:'company'},
   {name:'price'},
   {name:'change'},
   {name:'change_'},
   {name:'lastupdated'}
   ])
  });
  
  var cm = new Ext.grid.ColumnModel([
    {header:"company", dataIndex:"company",sortable:true},
    {header:"price" ,dataIndex:"price",sortable:true},
    {header:"change",dataIndex:"change",renderer:function change(val){
if(val > 0){
return '<span style="color:green;">' + val + '</span>';
}else if(val < 0){
return '<span style="color:red;">' + val + '</span>';
}
return val;
} ,sortable:true},
    {header:"change_" ,dataIndex:"change_" ,renderer:function pctChange(val){
if(val > 0){
return '<span style="color:green;">' + val + '%</span>';
}else if(val < 0){
return '<span style="color:red;">' + val + '%</span>';
}
return val;
},sortable:true},
    {header:"lastupdated" ,dataIndex:"lastupdated",sortable:true}
  ]);
 
  var grid = new Ext.grid.GridPanel({
   el: 'grid',
   ds:ds,
   cm:cm
  });
  ds.load();

});
</script>
不知道什么问题, 不执行servlet中的内容.servlet中只是把查询数据库中信息 想放到gridPanel中显示 .也没找到什么原因,不知是那出现的问题 .请教!

解决方案 »

  1.   

    可能会导致你问题的地方
    1.proxy: new Ext.data.HttpProxy({url:'/LookServlet'}) 这里的url相对地址要引用正确
    2.由于你ds的reader用的是JsonReader,所以servlet必须返回JSON格式的数据
    这个可以先自己手写一段JSON格式的数据返回,如果成功的话,再换成代码查询生成
    3.一般数据后台动态生成时,当数据量过多时,都会分页显示,所以你的ds.load()也要考虑带参数start和limit
    4.最后你的grid没有调用render()方法,也就是在load之后,应该再加一句:grid.render();
    Ext这个框架还是不错的,就是出点问题不容易找出来,要花点时间研究
    最后,给你再提点建议,多看API,EXT的API还是不错的
      

  2.   

    grid.render();加上了 
    出现了 this.el.dom 为空或不是对象 
    感谢楼上提的建议 ,这块调试好了 我会加上分页的.
      

  3.   

    this.el.dom 为空或不是对象
    你的grid有设置 el : 'grid',
    那你的HTML页面<body> </body>标记中,有没有<div id='grid'></div>呢?
    如果没有的话,加上应该就没什么问题了
      

  4.   

    是这样 明白了 .
    我的servlet中这么写可以吗 .String Joson = "{totalProperty:30,root:[";
    while (rs.next()) { String company = rs.getString("company");
    Float price = rs.getFloat("price");
    Float change = rs.getFloat("change");
    Float change_ = rs.getFloat("%change");
    String lastupdated = rs.getString("lastupdated");
    Joson += "{company:'" + company + "'price:" + price
    + "change:" + change + "%change:" + change_
    + "lastUpdated:'" + lastupdated + "'}";
    Joson += ",";
    System.out.println("Servlet" + company);
    }
    Joson += "]}";
    response.getWriter().write(Joson);
      

  5.   

    你这样写是可以的,不过还存在一些问题
    String Joson = "{totalProperty:30,root:["; 
    while (rs.next()) { String company = rs.getString("company"); 
    Float price = rs.getFloat("price"); 
    Float change = rs.getFloat("change"); 
    Float change_ = rs.getFloat("%change"); 
    String lastupdated = rs.getString("lastupdated"); 
    Joson += "{company:'" + company + "',price:" + price 
    + ",change:" + change + ",%change:" + change_ 
    + ",lastUpdated:'" + lastupdated + "'}"; 
    //最后一条记录是不需要加','的,所以要注意区分判断
    Joson += ","; 
    //这句话没啥用吧?
    System.out.println("Servlet" + company); 

    Joson += "]}"; 
    response.getWriter().write(Joson); 
    最后,如果你的grid没显示内容,建议直接访问servlet,看看输出的是否是JSON格式
    还有就是要设置输出的contentType="text/html;charset=gb2312" 或者 "text/plain;charset=gb2312"
    总之就是要细心,多测试一下
      

  6.   

    你说的那些注意的地方,已经改过了 .servlet也能正常执行.
    下面 我们输出控制台的Joson 应该没问题啊.
    {totalProperty:50,root:[{company:'3mCo', price:71.72 , change:0.02 , %change:0.03 , lastupdated:'09/01/2008'},{company:'American Express ', price:52.55 , change:0.01 , %change:0.02 , lastupdated:'09/01/2006'},{company:'AT&T Inc', price:31.16 , change:-0.48 , %change:-1.54 , lastupdated:'09/01/2008'}]}转到页面上 数据不显示在gridpanel上 
    String Joson = "{totalProperty:50,root:[";
     while (rs.next()) {

     String company = rs.getString("company");
     Float price = rs.getFloat("price");
     Float change = rs.getFloat("change");
     Float change_ = rs.getFloat("%change");
     String lastupdated = rs.getString("lastupdated");
     
              Joson += "{company:'" + company + "', price:" + price
     + " , change:" + change + " , %change:" + change_
     + " , lastupdated:'" + lastupdated + "'}";
     
             if(rs.next()){
      Joson += ",";
      }
     }
     Joson += "]}";
     System.out.println(Joson);
     response.getWriter().write(Joson);
     request.getRequestDispatcher("/main.jsp").forward(request, response);


     } catch (SQLException e) {
     e.printStackTrace();
     }
      

  7.   

    试了再试 还是不行.数据在gridPanl中不显示.
    那有问题呢?
      

  8.   

    我把代码都贴出来了.LookServlet:public class LookServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {  Connection conn = null;
     try {
     DButil db = new DButil();
     conn = db.getConnection();
     String query = "select * from co_information";
     Statement stmt = conn.createStatement();
     ResultSet rs = stmt.executeQuery(query);
     String Joson = "{totalProperty:50,root:[";
     while (rs.next()) {

     String company = rs.getString("company");
     Float price = rs.getFloat("price");
     Float change = rs.getFloat("change");
     Float change_ = rs.getFloat("%change");
     String lastupdated = rs.getString("lastupdated");
     Joson += "{company:'" + company + "', price:" + price
     + " , change:" + change + " , %change:" + change_
     + " , lastupdated:'" + lastupdated + "'}";
     if(rs.next()){
      Joson += ",";
      }
     }
     Joson += "]}";
     System.out.println(Joson);
     response.getWriter().write(Joson);
     request.getRequestDispatcher("/main.jsp").forward(request, response);


     } catch (SQLException e) {
     e.printStackTrace();
     }
    } public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException { this.doGet(request, response);
    }}
      

  9.   

    main.jsp:
    <%@ page contentType="text/html;charset=GBK"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>My JSP 'main.jsp' starting page</title>
        
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <link rel="stylesheet" type="text/css" href="extjs/resources/css/ext-all.css" /> 
    <script type="text/javascript" src="extjs/adapter/ext/ext-base.js"></script>
    <script type="text/javascript" src="extjs/ext-all.js"></script>

    <script type="text/javascript">
    Ext.onReady(function(){

    var ds = new Ext.data.Store({
      proxy: new Ext.data.HttpProxy({url:'/Ext_project/LookServlet'}),
      reader: new Ext.data.JsonReader({
       totalProperty:'totalProperty',
       root:'root'},
       [
       {name: "company" ,type: String,mapping:0},
       {name: "price" , mapping:1},
       {name: "change" , mapping:2},
       {name: "change_" , mapping:3},
       {name: "lastupdated" , type:String,mapping:4}
       ])
      });
      
      var cm = new Ext.grid.ColumnModel([
        {header:"company", dataIndex:"company",sortable:true},
        {header:"price" ,dataIndex:"price",sortable:true},
        {header:"change",dataIndex:"change",renderer:function change(val){
    if(val > 0){
    return '<span style="color:green;">' + val + '</span>';
    }else if(val < 0){
    return '<span style="color:red;">' + val + '</span>';
    }
    return val;
    } ,sortable:true},
        {header:"%change" ,dataIndex:"%change" ,renderer:function pctChange(val){
    if(val > 0){
    return '<span style="color:green;">' + val + '%</span>';
    }else if(val < 0){
    return '<span style="color:red;">' + val + '%</span>';
    }
    return val;
    },sortable:true},
        {header:"lastupdated" ,dataIndex:"lastupdated",sortable:true}
      ]);
     
      var grid = new Ext.grid.GridPanel({
       el: 'grid',
       ds:ds,
       cm:cm
      });
      ds.load();
      grid.render();
    });
    </script>
      </head>
      
      <body>
          <div id='grid' style="height:265px;"> </div>
      </body>
    </html>
      

  10.   

    建议楼上的在服务器端不要去拼很长的Json字符串,可以采用JSONArray做为想web端传递的介质,其中存放JSONObject.每个JSONObject就对应数据库中一条记录,相当与Record.然后在web端选一个Reader接受一下服务器传来的JSONArray就可以了.
      

  11.   

    JsonArray 在API中没找到啊 .这个怎么用呢. 现在都不知道哪的问题了
      

  12.   

    我网上载下来一个包
    json-lib-2.2-jdk15.jar
    这里面有jsonArray 和jsonobject 不知道这个包行不行.
    下面是代码 :
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {  Connection conn = null;
     try {
     DButil db = new DButil();
     conn = db.getConnection();
     JSONArray array = new JSONArray();  说这行有问题 
     StringBuilder builder = new StringBuilder();
     String query = "select * from co_information";
     Statement stmt = conn.createStatement();
     ResultSet rs = stmt.executeQuery(query);
     //String Joson = "{totalProperty:50,root:[";
     while (rs.next()) {
     
     JSONObject obj = new JSONObject();
     information in = new information();
     in.setCompany(rs.getString("company"));
     in.setPrice(rs.getFloat("price"));
     in.setChange(rs.getFloat("change"));
     in.setChange_(rs.getFloat("%change"));
     in.setLastupdated(rs.getString("lastupdated"));
     obj.put("company", in.getCompany());
     obj.put("price", in.getPrice());
     obj.put("change", in.getChange());
     obj.put("change_", in.getChange_());
     obj.put("lastupdated", in.getLastupdated());
     array.add(obj);
     
     }

     builder.append(array);
     System.out.println(builder.toString());
     response.getWriter().write(builder.toString());
     request.getRequestDispatcher("/main.jsp").forward(request, response);


     } catch (SQLException e) {
     e.printStackTrace();
     }bug:- Servlet.service() for servlet LookServlet threw exception
    java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/NestableRuntimeException
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
    at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1847)
    at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:873)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1326)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1205)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
    at org.jxnh.servlet.LookServlet.doGet(LookServlet.java:28)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
    at java.lang.Thread.run(Thread.java:595)到底是代码的事,还是 jar包 不行.请教了! 这点东西整了几天了.
      

  13.   

    上面的问题我解决了 少包造成的.
    但是应用json-lib 的  JsonObject 和 JsonArray 执行了 怎么把数据显示到页面的gridpanel上啊  代码是这样: Connection conn = null;
     try {
     DButil db = new DButil();
     conn = db.getConnection();  
     StringBuilder builder = new StringBuilder();
     String query = "select * from co_information";
     Statement stmt = conn.createStatement();
     ResultSet rs = stmt.executeQuery(query);
    try {
      
    JSONArray array = new JSONArray();
     
    while (rs.next()) {
     
     JSONObject obj = new JSONObject();
     information in = new information();
     in.setCompany(rs.getString("company"));
     in.setPrice(rs.getFloat("price"));
     in.setChange(rs.getFloat("change"));
     in.setChange_(rs.getFloat("%change"));
     in.setLastupdated(rs.getString("lastupdated"));
     obj.put("company", in.getCompany());
     obj.put("price", in.getPrice());
     obj.put("change", in.getChange());
     obj.put("change_", in.getChange_());
     obj.put("lastupdated", in.getLastupdated());
     array.add(obj);
     
     
     }
     //builder.append(array);
     System.out.println(array);
     response.getWriter().write(array.toString());
     request.getRequestDispatcher("/main.jsp").forward(request, response);
    }catch(Exception e){
    e.printStackTrace();
    }
     } catch (SQLException e) {
     e.printStackTrace();
     }
    } public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException { this.doGet(request, response);
    }}
    页面是:<script type="text/javascript">
    Ext.onReady(function(){

    var ds = new Ext.data.Store({
      proxy: new Ext.data.HttpProxy({url:'/Ext_project/LookServlet'}),
      reader: new Ext.data.JsonReader({
       totalProperty:'totalProperty',
       root:'root',
       id: 'company' },
       [
       {name: 'company'},
       {name: 'price' ,type:'float'},
       {name: 'change', type:'float'},
       {name: 'change_' ,type:'float'},
       {name: 'lastupdated'}
       ]),
         remoteSort: true
      });
      
      var cm = new Ext.grid.ColumnModel([
        {header:"company", dataIndex:'company',sortable:true},
        {header:"price" ,dataIndex:'price',sortable:true},
        {header:"change",dataIndex:'change',renderer:function change(val){
    if(val > 0){
    return '<span style="color:green;">' + val + '</span>';
    }else if(val < 0){
    return '<span style="color:red;">' + val + '</span>';
    }
    return val;
    } ,sortable:true},
        {header:"%change" ,dataIndex:'%change' ,renderer:function pctChange(val){
    if(val > 0){
    return '<span style="color:green;">' + val + '%</span>';
    }else if(val < 0){
    return '<span style="color:red;">' + val + '%</span>';
    }
    return val;
    },sortable:true},
        {header:"lastupdated" ,dataIndex:'lastupdated',sortable:true}
      ]);
     
      var grid = new Ext.grid.GridPanel({
       el: 'grid',
       ds:ds,
       cm:cm,
       width:700,
       height:280
     
      });
      
      grid.render();
      ds.load();
    });
    </script>
      

  14.   

     System.out.println(Joson); 
     response.getWriter().write(Joson); 
     request.getRequestDispatcher("/main.jsp").forward(request, response); 貌似应该设置一下编码吧 System.out.println(Joson); 
     response.setContext("text/html;charset=GBK");
     response.getWriter().write(Joson); 
     //request.getRequestDispatcher("/main.jsp").forward(request, response); 
     由于你的main.jsp文件用的是GBK编码的,所以这里输出也用GBK编码,
    不过建议统一使用UTF-8编码如果还是不能输出的话,看看后台System.out.println(Joson)的结果,格式是否正确,任何格式错误都可能导致grid显示不出来的。
    实在不行加我MSN吧,我周末帮你看看
    [email protected]
      

  15.   

    遇到同样的情况!System.out.println(Joson)能输出结果!但grid就是无法显示出数据,firebug调试也没任何的错误
      

  16.   

    json = {"totalProperty":4,"root":[{"fileHot":0,"fileName":"Clear8090LPUBObj","filePath":"aaa.html","fileSize":1,"fileType":"bat","id":318,"readAble":1,"updateTime":1243610860943,"writeAble":1},{"fileHot":0,"fileName":"Clear8090SFUIObj","filePath":"aaa.html","fileSize":0,"fileType":"bat","id":724,"readAble":1,"updateTime":1243610862380,"writeAble":1},{"fileHot":0,"fileName":"Clear8090MPUObj.bat","filePath":"aaa.html.bak","fileSize":1,"fileType":"bak","id":1330,"readAble":1,"updateTime":1243610861599,"writeAble":1},{"fileHot":0,"fileName":"Clear8090ALLObj.bat","filePath":"aaa.html.bak","fileSize":2,"fileType":"bak","id":2736,"readAble":1,"updateTime":1251189202311,"writeAble":1}]}
      

  17.   

    上面是我的json代码,也是显示不出来的...
      

  18.   

    #3楼的大哥,我万分感谢你,google搜到你的答案解决了我的问题