WEB框架研究笔记二(Extjs调用Struts)

本文介绍如何将ExtJS与Struts2框架相结合,实现动态加载数据表格,并通过具体步骤展示了配置过程及代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

20090626

昨天研究了STRUTS2,今天的任务是如何让STRUTS和EXTJS合作。采用EXTJS的一个例子进行改造。需要达到的效果:

image

1.按照原来Extjs里的例子将Extjs包放到Struts例子工程中。

2.拷贝GRID的HTML和JS

grid-json-data.html

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Array Grid Example</title>
        <link rel="stylesheet" type="text/css" href="../resources/css/ext-all.css"/>
        <!-- LIBS -->
        <script type="text/javascript" src="../adapter/ext/ext-base.js">
        </script>
        <!-- ENDLIBS -->
        <script type="text/javascript" src="../ext-all.js">
        </script>
        <script type="text/javascript" src="json-grid.js"></script>
    </head>
    <body>
      <div id="grid-example"></div>
      <div id="delete"></div>
    </body>
</html>

json-grid.js

Ext.onReady(function(){
  Ext.data.Store.prototype.applySort = function(){
    if (this.sortInfo && !this.remoteSort) {
      var s = this.sortInfo, f = s.field;
      var st = this.fields.get(f).sortType;
      var fn = function(r1, r2){
        var v1 = st(r1.data[f]), v2 = st(r2.data[f]);
        if (typeof(v1) == "string"){
          return v1.localeCompare(v2);
        }
        return v1 > v2 ? 1 : (v1 < v2 ? -1:0);
      };
      this.data.sort(s.direction, fn);
      if(this.snapshot && this.snapshot != this.data){
        this.snapshot.sort(s.direction, fn);
      }
    }
  };

  var store = new Ext.data.JsonStore({
    root: 'root',
    totalProperty: 'totalProperty',
    fields: [
       {name: 'id'},
       {name: 'name'},
       {name: 'descn'}
    ],
    proxy: new Ext.data.HttpProxy({url:'http://192.168.1.253:8088/strutsProj/ExtjsSample/grid.jsp'})
  });

   var sm = new Ext.grid.CheckboxSelectionModel({handleMouseDown: Ext.emptyFn});

    // create the Grid
    var grid = new Ext.grid.GridPanel({
        store: store,
        columns: [
            new Ext.grid.RowNumberer(),
            sm,
            {header:'编号', renderer:function(value, cellmeta, record, rowIndex){
              return rowIndex + 1;
            }},
            {id:'id',header: "ID中文字", sortable: true, dataIndex: 'id',width: 80},
            {header: "NAME", sortable: true, dataIndex: 'name', width: 80},
            {id: 'descn', header: "DESCN",sortable: true, dataIndex: 'descn', width: 80}
        ],
        stripeRows: true,
        autoExpandColumn: 'descn',
        sm: sm,
        height:350,
        width:600,
        tbar: new Ext.PagingToolbar({
          pageSize: 10,
          store: store,
          displayInfo: true,
          displayMsg: '显示第{0}条到{1}条记录,一共{2}条',
          emptyMsg: '没有记录'
        }),
        title:'Array Grid'
    });

    grid.render('grid-example');
//    store.loadData({params:{start:0,limit:10}});
    store.load({params:{start:0, limit:10}});

    //删除按钮
    Ext.get('delete').on('click', function(){
      store.remove(store.getAt(1));
      grid.view.refresh();
    });
});

 

grid.jsp:

<%
  String start = request.getParameter("start");
  String limit = request.getParameter("limit");
  try{
    int index = Integer.parseInt(start);
    int pageSize = Integer.parseInt(limit);

    String json = "{totalProperty:100, root:[";
    for (int i = index; i < index + pageSize; i ++){
      json += "{id:" + i + ",name:'name" + i + "', descn:'descn" + i + "'}";
      if (i != pageSize + index - 1){
        json += ',';
      }
    }
    json += "]}";
    response.getWriter().write(json);

  }
  catch (Exception ex){
  }
%>

OK,可以正常运行了。这个例子是EXTJS和JSP连接,直接从EXTJS的例子里搬过来的,现在需要和STRUTS连接。

3.写GridAction

package action;

import java.io.*;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class GridAction extends ActionSupport{
    private String start;
    private String limit;
    public void setStart(String start)
    {
        System.out.println(start);
          this.start = start;
    }
    public String getStart()
    {
        return start;
    }
    public void setLimit(String limit)
    {
        System.out.println(limit);
          this.limit = limit;
    }
    public String getLimit()
    {
        return limit;
    }
    public String execute() throws Exception
    {
        HttpServletResponse response = ServletActionContext.getResponse();
        try{
          int index = Integer.parseInt(start);
          int pageSize = Integer.parseInt(limit);

          String json = "{totalProperty:100, root:[";
          for (int i = index; i < index + pageSize; i ++){
            json += "{id:" + i + ",name:'name" + i + "', descn:'descn" + i + "'}";
            if (i != pageSize + index - 1){
              json += ',';
            }
          }
          json += "]}";
          response.getWriter().write(json);

        }
        catch (Exception ex){
        }       
        return null;
    }

}

4.配置struts.xml

<action name="grid" class="action.GridAction">
</action>

5.修改json-grid.js

  var store = new Ext.data.JsonStore({
    root: 'root',
    totalProperty: 'totalProperty',
    fields: [
       {name: 'id'},
       {name: 'name'},
       {name: 'descn'}
    ],
//    proxy: new Ext.data.HttpProxy({url:'http://192.168.1.253:8088/strutsProj/ExtjsSample/grid.jsp'})
    proxy: new Ext.data.HttpProxy({url:'grid.action'})
  });

OK,可以了,哈哈。

转载于:https://www.cnblogs.com/barryhong/archive/2009/06/26/1511455.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值