ExtJs + Struts2 + JSON 程序总结

news/2023/11/30 18:01:56
ExtJs + Struts2 + JSON 程序总结
最近一直都在看EXTJS的东西,然后自己实践了下,界面倒是蛮漂亮的,但是一旦涉及到与服务器端进行数据互动麻烦就出来了,本来下了个例子确发现是用DWR的,觉得我既然用了STRUTS2作为MVC的框架,我觉得这个框架还是很不错的,觉得还是把EXTJS整合到一起更好些,找了相关的资料,跟着前辈做了下例子,发现完全不是那么回事,只好自己慢慢摸索,终于把数据交互的问题解决了,所以记录之以便查阅!
还是从底层开始说吧,拿最经典的例子来解说吧,订单和客户的关系显然是n:1的关系,我hibernate不是用的声明方式所以就用的xml方式做的那么相应的hbm.xml文件如下:
[code]
ORDER.XML
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.model.Order" table="t_order" lazy="false">
<id name="orderId" column="OrderId">
<generator class="uuid.hex" />
</id>
<property name="name" column="Name" type="string" />
<property name="desn" column="Desn" type="string"/>
<property name="booktime" column="Booktime" type="string"/>
<property name="company" column="Company" />
<many-to-one lazy="false" name="custom" column="CustomId" class="com.model.Customer" />
</class>
</hibernate-mapping>
CUSTOM.XML
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.model.Custom" table="t_custom" lazy="false">
<id name="customId" column="Id">
<generator class="uuid.hex" />
</id>
<property name="customName" column="Name" type="string" />
</class>
</hibernate-mapping>
[/code]
相应的MODEL的JAVA我就不写了,只是做个例子而已,呵呵!相应的DAO SERVICE 我都不写了,这个不是我讨论的范围,那么我想在页面上显示所有的信息,那么在OrderAction中我定义了一个getAllOrder的方法,然后通过struts2配置action让EXTJS与服务器数据进行数据交互。因为EXTJS是支持JSON数据格式的,所以我用了JSON- LIB(json-lib-2.2.1-jdk15.jar)这个东东,它还依赖另外的3个包:commons-beanutils- 1.7.1-20061106.jar,commons-collections-3.2.1.jar,ezmorph-1.0.4.jar。好了万事俱备只欠东风了,我的getAllOrder方法如下:
[code]
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import net.sf.json.*;
//具体的那些serivce的包引入我就省略了
public class OrderAction extends ActionSupport
{
private static final long serialVersionUID = -5092865658281004791L;
private IOrderSerivce orderSerivce;
private String jsonString;//这个就是中转站了
private List<Order> orderList;//这个是数据链表
private int totalCount;//这个是extjs用来分页
public String getJsonString()
{
return jsonString;
}
public void setJsonString(String jsonString)
{
this.jsonString = jsonString;
}
public int getTotalCount()
{
return totalCount;
}
public void setTotalCount(int totalCount)
{
this.totalCount = totalCount;
}
public List<Air> getOrderList()
{
return orderList;
}
public void setOrderList(List<Order> orderList)
{
this.orderList = orderList;
}
public void setOrderSerivce(OrderSerivce orderSerivce)
{
this.orderSerivce = orderSerivce;
}
public String getAllAir()
{
orderList = orderSerivce.getOrderAll();
this.setTotalCount(orderList.size());

JSONArray array = JSONArray.fromObject(orderList);
//哈哈,就是在这里进行转换的
this.jsonString = "{totalCount:"+this.getTotalCount()+",results:"+array.toString()+"}";
return SUCCESS;
}
}
接下来再是什么,哦,是的,应该是STRUTS的配置了,哈哈
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
<package name="order" extends="struts-default">
<action name="getAllOrder" class="orderAction" method="getAllOrder">
<result name="success" >jsondata.jsp</result>
</action>
</package>
</struts>
[/code]
好的,看到jsondata.jsp了么,这里就是要放数据的地方,看看是什么吧!
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<s:property value="jsonString" escape="false" />
是的,就是这么简单的一个代码!终于要到前台了,该露脸了,呵呵,前台代码最关键的也就是JS代码,那么我也就只贴JS了相信大家看过后都会自己弄清楚的!
[code]

Ext.onReady(function(){
Ext.BLANK_IMAGE_URL = 'ext/resources/images/default/s.gif';
Ext.QuickTips.init();
var xg = Ext.grid;
//这里就是设置解析格式的地方,一定要和你的Model一样,要不然可是什么都得不到哦~~~~
var rd = new Ext.data.JsonReader({
//总记录数
totalProperty: 'totalCount',
//哪儿是数据的头,可以看action里面是怎么定义数据格式的,这里就是如何解析的
root: 'results',
//有那些字段呢?
fields:[
{name:'orderId'},
{name:'desn'},
{name:'booktime'},
{name:'company'},
{name:'name'},
//这里就是对custom对象进行映射的地方
{name:'customId' ,mapping:'custom.customId'},
{name:'customName',mapping:'custom.customName'}
]
});
var ds = new Ext.data.Store({
proxy: new Ext.data.HttpProxy
({url: 'getAllOrder.action',method:'POST'}),//Url很关键,我就是因为没配好这个,POST方法很重要,你可以省略,让你看下错误也行的!耽误了一大堆时间!
reader:rd
});
ds.load();
var sm =new xg.CheckboxSelectionModel(); //CheckBox选择列
var cm =new xg.ColumnModel([
new Ext.grid.RowNumberer(), //行号列
sm,
{id:'orderId',header: "订单号", dataIndex: 'name'}, {header: "订单时间", dataIndex: 'booktime'},
{header: "订单公司", dataIndex: 'company'},
{header:"客户姓名",dataIndex:'customName'}
]);
cm.defaultSortable = true;

// OrderGrid

var ordergrid = new xg.GridPanel({
ds: ds,
sm: sm,
cm: cm,
width:1000,
height:500,
frame:true,
title:'Framed with Checkbox Selection and Horizontal Scrolling',
iconCls:'icon-grid',
renderTo: document.body
});
ordergrid.render();

});
[/code]

http://www.niftyadmin.cn/n/3855001.html

相关文章

6、一个 pthread_cancel 引起的线程死锁(转)

6、一个 pthread_cancel 引起的线程死锁【整理转载】 说明&#xff1a;本文由【2,3】整理而得。 这篇文章主要从一个 Linux 下一个 pthread_cancel 函数引起的多线程死锁小例子出发来说明 Linux 系统对 POSIX 线程取消点的实现方式&#xff0c;以及如何避免因此产生的线程死锁。…

【C#】事件

前言&#xff1a;CLR事件模式建立在委托的基础上,委托说调用回调方法的一种类型安全的方式。 我个人觉得事件本质就是委托&#xff0c;所以把委托弄清楚&#xff0c;只要知道事件基本语法就会使用了&#xff08;如果说到线程安全&#xff0c;我个人觉得这个应该和线程一起去讨论…

eclipse中如何将项目转成dynamic web project

eclipse中如何将项目转成dynamic web project一、从java project到dynamic web project1、打开工程根目录下的.project2、在buildSpec节点下增加&#xff1a; [code]Xml代码1. < buildCommand > 2. < name > org.eclipse.wst.common.project.facet.core.builder &l…

【算法Everyday】第三日 KMP算法

题目 你知道的。 分析 分析不来。 代码 void OutputArray(int* pArr, int iLen) {for (int i 0; i < iLen; i){printf("%d\t", pArr[i]);}printf("\n"); }void GetNextValue(char const* szPattern, int iLen, int* pNextArr) {int i 0; pNextArr[i]…

IndexWriter和IndexReader对象分析

IndexWriter和IndexReader对象的创建都是非常耗时的操作 对于IndexReader一般用IndexReader创建一个Searcher对象来进行操作&#xff0c;但是这个时候&#xff0c;如果用 writer对索引进行了更新&#xff0c;searcher对象不能实时的相应出来&#xff0c;所以用一下方法来创建se…

(转)正则表达式小括号的多义性

原文地址&#xff1a;http://www.cnblogs.com/snandy/p/3650309.html 小括号在正则表达式这有以下意义 限定量词作用的范围限定多选结构的范围为反向引用捕获文本分组捕获只分组不捕获前瞻一、限定量词作用的范围 ?123var reg1 /(Matz)?/; // 0或1个Matzvar reg2 /(Matz)/;…

eclipse 如何将普通的项目编程动态的Web项目

eclipse 如何将普通的项目编程动态的Web项目以本人的个人经验&#xff0c;我觉得有二种方式&#xff1a;第一&#xff1a;就是右击项目 点属性 选择Project Facets&#xff0c;最后在右边选择Dynmic Web Module即可 [color:red] 具体请看附件 eclipse.jpg [/color]第二&#xf…

用艾宾浩斯曲线记忆周期来背单词是否有理论依据?

from&#xff1a;http://www.zhihu.com/question/19798259 在网上&#xff08;http://www.douban.com/group/topic/1054905/&#xff09;看到的说法&#xff0c;大致是说背单词的时候&#xff0c;在这几个点记忆效果最好&#xff1a; 一、 复习点的确定&#xff08;根据艾宾浩斯…

JavaEye使用技巧

JavaEye使用技巧去掉图片超链接边框颜色&#xff1a;一种方法是在图片img标签上添加 border"0"如果图片太多.也可以在CSS中添加 img {border:0px} 去掉图片超链接边框<a href"url1"><img src"url2" border"0"></a>就…

System.Attribute 类的使用

最近自己写了个ORM框架&#xff0c;里面用到的 属性和字段的特性装饰定义Attribute装饰类、实体类、字段结构体&#xff1a;View Code [AttributeUsage(AttributeTargets.Property)] //此属性只能用在Property上 public class CyAttribute : Attribute{private string _dataty…

WebSite And WebApplication

WebSite 는 파일 기반 이고. WebApplication 은 웹응용 프로그램 기반이다. WebSite 인 경우,이식성이 강하다(충돌이 적고,배포가 쉽다.)转载于:https://www.cnblogs.com/kevinkim/archive/2011/04/17/2018710.html

mysql不允许远程用户访问主机服务器 1130

mysql不允许远程用户访问主机服务器 1130安装完之后成 使用 mysql admin连接报错ERROR 1130: Host ***.***.***.*** is not allowed to connect to this MySQL server以下百度查到的&#xff0c;试过可以说明所连接的用户帐号没有远程连接的权限&#xff0c;只能在本机(localho…

codecademy的ruby课程不错

为什么80%的码农都做不了架构师&#xff1f;>>> 一直使用C#做开发&#xff0c;其实还不错&#xff0c;之前有学过python。用起来真没有C#顺手。但是未来开发网站&#xff0c;我不希望依靠C#&#xff0c;你懂的&#xff01;最近做asp.net mvc 做一个商场 &#xff0…

Georgia Tech Online Master of Science in Computer Science 项目经验分享

Georgia Tech Online Master of Science in Computer Science 项目经验分享 Posted on 2014/04/22项目关键词&#xff1a;工科名校&#xff0c;计算机硕士学位&#xff0c;MOOC授课&#xff0c;价格低廉 GaTech&#xff0c;乔治亚理工&#xff0c;美国工科名校&#xff0c;计算…

解决phpmyadmin 1800秒超时链接失效问题

解决phpmyadmin 1800秒超时链接失效问题如果要让别人使用你的数据库连接的话&#xff0c;我们要先设置一下权限。phpmyadmin 2.11在开发过程中经常出现“持续 1800 秒以上的非活动状态&#xff0c;导致超时&#xff0c;请重新登录”&#xff0c;不是一般烦。解决如下&#xff1…

U盘装WIN7_安装程序无法定位现有分区,也无法创建新的系统分区

转自&#xff1a;http://blog.sina.com.cn/s/blog_8d9200eb0100xttg.html 我最近装WIN7&#xff0c;格了盘之后&#xff0c;总是出现提示“安装程序无法定位现有分区&#xff0c;也无法创建新的系统分区”&#xff0c;想了很多办法&#xff0c;总是无法解决&#xff0c;后来经过…
最新文章