- 浏览: 235111 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
cherami:
解法3有问题,在n很大的时候会导致baseNum溢出使得结果不 ...
阶乘算法之一N! 末尾有多少个零 -
yubenjie:
我怎么没看出多线程啊,就单线程再跑嘛
多线程编程之理财 -
fei229670104:
多线程 不错
多线程编程之理财 -
fei229670104:
liujiafei_2007 写道你好,问个问题,取钱时不用判 ...
多线程编程之存钱与取钱 -
liujiafei_2007:
你好,问个问题,取钱时不用判断取出的金额是否大于账户的余额吗? ...
多线程编程之存钱与取钱
Extjs4.0 学习笔记四
继续学习Extjs4.0 菜单tree应用,这次实现的是Extjs与Struts2之间的数据交互。
其中交互的数据格式为json,采用的技术有json-lib,本次数据是在Struts的服务里写死的,实际项目中,菜单列表都是从数据库表里读取的。
Extjs: 用于前台页面展示
Struts: 后台服务层,主要支撑数据的交互、及服务的业务逻辑
Json-lib: 可以将Java对象转成json格式的字符串,也可以将Java对象转换成xml格式的文档
一:页面效果
子菜单展开后的样式如下所示:
二:代码
1: 页面代码menu.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Extjs--Struts例子</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="ext4/resources/css/ext-all.css" />
<script type="text/javascript" src="ext4/bootstrap.js"></script>
<script type="text/javascript">
Ext.require([
'Ext.tree.*',
'Ext.data.*',
'Ext.tip.*'
]);
Ext.onReady(function() {
Ext.QuickTips.init();
var store = Ext.create('Ext.data.TreeStore', {
proxy: {
type: 'ajax',
url: 'menu!execute.action'
},
root: {
text: 'ExtJS',
id: 'src',
expanded: true
},
folderSort: true,
sorters: [{
property: 'text',
direction: 'ASC'
}]
});
var tree = Ext.create('Ext.tree.Panel', {
store: store,
viewConfig: {
plugins: {
ptype: 'treeviewdragdrop'
}
},
renderTo: 'tree-div',
height: 300,
width: 250,
title: 'Files',
useArrows: true,
dockedItems: [{
xtype: 'toolbar',
items: [{
text: 'Expand All',
handler: function(){
tree.expandAll();
}
}, {
text: 'Collapse All',
handler: function(){
tree.collapseAll();
}
}]
}]
});
});
</script>
</head>
<body>
<br/><br/>
<span style="color:red">
本例子采用的技术有: Extjs4.0 + Struts2 + json-lib
</span>
<br/><br/>
<div id="tree-div"></div>
</body>
</html>
2: 服务层代码
2.1 JavaBean Menu.java
package cn.com.bean;
import java.util.List;
public class Menu {
private int id;
private String text;
private boolean leaf;
private String cls;
private List children;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public boolean isLeaf() {
return leaf;
}
public void setLeaf(boolean leaf) {
this.leaf = leaf;
}
public String getCls() {
return cls;
}
public void setCls(String cls) {
this.cls = cls;
}
public List getChildren() {
return children;
}
public void setChildren(List children) {
this.children = children;
}
}
2.1 Action MenuAction.java
package cn.com.action;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONArray;
import org.apache.struts2.ServletActionContext;
import cn.com.bean.Menu;
public class MenuAction {
private String menuString;
private List menus;
public void execute(){
HttpServletResponse response = ServletActionContext.getResponse();
response.setCharacterEncoding("utf-8");
menus = new ArrayList();
Menu benz = new Menu();
benz.setText("二级菜单目录1");
benz.setCls("folder");
benz.setLeaf(false);
benz.setId(10);
menus.add(benz);
List benzList = new ArrayList();
benz.setChildren(benzList);
//二级菜单目录1的子菜单1
Menu menu = new Menu();
menu.setText("子菜单1-1");
menu.setCls("file");
menu.setLeaf(true);
menu.setId(11);
benzList.add(menu);
//二级菜单目录1的子菜单2
menu = new Menu();
menu.setText("子菜单1-2");
menu.setCls("file");
menu.setLeaf(true);
menu.setId(12);
benzList.add(menu);
Menu bmw = new Menu();
bmw.setText("二级菜单目录2");
bmw.setCls("folder");
bmw.setLeaf(false);
bmw.setId(20);
menus.add(bmw);
List bmwList = new ArrayList();
bmw.setChildren(bmwList);
//二级菜单目录2的子菜单1
menu = new Menu();
menu.setText("子菜单2-1");
menu.setCls("file");
menu.setLeaf(true);
menu.setId(21);
bmwList.add(menu);
//二级菜单目录2的子菜单1
menu = new Menu();
menu.setText("子菜单2-2");
menu.setCls("file");
menu.setLeaf(true);
menu.setId(22);
bmwList.add(menu);
JSONArray jsonObject = JSONArray.fromObject(menus);
try{
menuString = jsonObject.toString();
}catch(Exception e){
menuString = "ss";
}
try {
response.getWriter().write(menuString);
} catch (IOException e) {
e.printStackTrace();
}
//return "success";
}
public String getMenuString() {
return menuString;
}
public void setMenuString(String menuString) {
this.menuString = menuString;
}
}
其中web.xml 和 struts.xml代码和一般的项目配置一样。
三 总结
通过本次例子可以学习总结到以下知识点:
1:JSon-lib 工具的应用
通过引入json-lib的jar 包就可以使用json-lib了,不需要配置其它文件。
这里引的jar包有
commons-beanutils-1.7.0.jar
commons-collections-3.2.jar
commons-lang.jar
commons-logging-1.1.jar
ezmorph-1.0.4.jar
json-lib-2.2.2-jdk15.jar
核心代码(其中menus为JavaBean 对象,转换后的menuString 为一字符串):
JSONArray jsonObject = JSONArray.fromObject(menus);
try{
menuString = jsonObject.toString();
}catch(Exception e){
menuString = "ss";
}
生成的menuString:
[{"children":[{"children":[],"cls":"file","id":11,"leaf":true,"text":"子菜单1-1"},
{"children":[],"cls":"file","id":12,"leaf":true,"text":"子菜单1-2"}],"cls":"folder","id":10,"leaf":false,"text":"二级菜单目录1"},{"children":[{"children":[],"cls":"file","id":21,"leaf":true,"text":"子菜单2-1"},
{"children":[],"cls":"file","id":22,"leaf":true,"text":"子菜单2-2"}],"cls":"folder","id":20,"leaf":false,"text":"二级菜单目录2"}]
2:Extjs 与后台Action交互的方式:
proxy: {
type: 'ajax',
url: 'menu!execute.action'
},
通过代理proxy 的ajax方式 与后台服务交互。这里需要注意的是,而在Ext中的提交数据的过程中,Ext框架用的是都是UTF-8编码,而且通过JSON提交的数据也是UTF-8编码。
如果Action中没有加response.setCharacterEncoding("utf-8");则页面中文将是乱码。
发表评论
-
Javascript中函数的toString()方法
2013-12-10 11:00 2754简述 The toString() method ... -
Rss 订阅 开发
2013-04-16 17:04 1872... -
CSS Specificity
2012-06-29 18:31 1147有时候对于页面元素设置了样式,可为什么页面的显示没有匹配 ... -
去除浏览器对表单值的记忆
2012-06-19 14:31 3352... -
Javascript 跨域
2012-06-12 14:50 1661... -
Javascript 跨域
2012-06-12 14:50 11<!-- [if gte mso 9]>&l ... -
Hosts文件使用
2012-04-01 14:04 1728一切都要从localho ... -
Extjs4.0学习笔记五(TabPanel应用)
2011-10-18 14:51 4901Extjs4 ... -
Extjs4.0学习笔记三(Tree应用)
2011-10-13 13:23 2771Ext ... -
Extjs4.0 学习笔记二
2011-10-09 17:12 2602Ext ... -
Extjs4.0 学习笔记一
2011-10-08 12:07 3085Ext ... -
获取B/S客户端IP
2011-07-22 14:41 2993最近想写个B/S架构的聊天系统,因为以前做过C/S架构的 ...
相关推荐
Extjs4.0学习笔记,以下是部分介绍: xtjs4,创建Ext组件有了新的方式,就是Ext.create(....),而且可以使用动态加载JS的方式来加快组件的渲染,我们再也不必一次加载已经达到1MB的ext-all.js了,本文介绍如何在EXTJS4...
ExtJS4.0开发笔记
Extjs4.0学习笔记大全.pdf,供大家学习
Extjs4.0学习笔记大全
第二十讲:extjs4.0的高级组件tree+grid整合案例补充 第二十一讲:extjs4.0的高级组件form上 第二十二讲:extjs4.0的高级组件form中 第二十三讲:extjs4.0的高级组件form下 第二十四讲:extjs4.0的高级组件form...
EXTJS4.0 开发笔记主要探讨了如何利用EXTJS4.0的MVC模式进行Web应用程序的构建,特别是员工管理系统的开发。在MVC模式下,开发过程更具有组织性和可维护性,将模型(Model)、视图(View)和控制器(Controller)...
EXTJS 4.0 学习文档 EXTJS 4.0 是一个面向开发 RIA 的 AJAX 应用,是一个用 JavaScript 写的,主要用于创建前端用户界面,是一个与后台技术无关的前端 AJAX 框架。它能够帮助我们在页面上快速而简单构建各种各样的...
EXTJS 是一个强大的JavaScript 库,专用于...EXTJS 4.0的学习涉及到了组件的创建、布局的管理、数据绑定和事件处理等多个方面,理解并熟练掌握这些知识点,能帮助开发者构建出功能强大、用户体验优秀的Web应用程序。
"Extjs4.0 Web应用开发指南(第二版)-源代码"这本书的源码部分,不仅提供了EXTJS4.0的源代码,还提供了书中实例的实现,这对于学习EXTJS4.0的实际开发流程非常有帮助。通过对照书中的讲解和源码,开发者可以更深入地...
在《ExtJs4.0 手册中文版》中,你可以找到关于ExtJS 4.0的全面介绍和详细指南。这个手册涵盖了框架的基础知识,如MVC架构、组件系统、数据绑定以及事件处理机制。此外,它还深入讲解了如何使用各种组件,如GridPanel...
Extjs 4.0中文版API
extjs4.0开发人员以及学习可以下载参考
EXTJS 4.0是一款基于JavaScript的开源前端框架,用于构建交互式的Web应用程序。它提供了一套丰富的UI组件库,支持多种浏览器,并具有良好的可扩展性。通过使用EXTJS,开发者可以更轻松地创建功能丰富、用户友好的...
ExtJS 4.0是Sencha公司开发的一款强大的JavaScript前端框架,主要用于构建富客户端Web应用程序。这个官方版本的发布标志着ExtJS在功能、性能和可维护性方面的一个重要里程碑。以下将详细介绍ExtJS 4.0中的核心概念、...
学习extjs资料,tree合成grid,很不错的视频文件,值得收藏
### Extjs4.0 学习指南核心知识点详解 #### 一、获取与安装Extjs4.0 **1.1 获取Extjs4.0** - **官方资源**: 访问官方网站 [http://extjs.org.cn/](http://extjs.org.cn/) 下载最新版本的Extjs4.0及相关文档和支持...
一款很好的适合Extjs4.0初学者学习的word文档,示例加上简单的标注说明,使你很快对Extjs4.0进入入门阶段,不可多得的文档,值得下载