ext学习笔记(转)

文章摘要:JSON------由键值组成的字符串。大括号对,表示对象,中括号表集合(即数组)。键要用双引号括起来,其后要加冒号,再跟值。一组键值之后,要再跟一组键修值要用逗号间隔。转义符是左倾斜线”” 在javaScript 中,很方便的把json字符串,转换成一系列对象.

-
JSON------由键值组成的字符串。大括号对,表示对象,中括号表集合(即数组)。

键要用双引号括起来,其后要加冒号,再跟值。一组键值之后,要再跟一组键修值要用逗号间隔。转义符是左倾斜线””

在javaScript 中,很方便的把json字符串,转换成一系列对象.



例1:运行跳出一个窗口:a:66"dd

<html>

<head>

<meta name="vs_defaultClientScript" content="JavaScript">

<script>

function jsontest(){

var jsontext = '{"man":{"weight":"75kg","age":"24"},

"ar":["1","2","3"],"name":"a:66\"dd"}';

var aman = eval("("+jsontext+")");

alert(aman.man.weight);

alert(aman.name);

}

</script>

</head>

<body οnlοad="jsontest();">

</body>

</html>



例2:

<html>

<head>

<meta name="vs_defaultClientScript" content="JavaScript">

<script>

function jsontest(){

var aman= {"man":{"weight":"7115kg","age":"24"},

"ar":["1","2","3"]};

alert(aman.man.weight);

alert(aman.ar[0]);

}

</script>

</head>

<body οnlοad="jsontest();">

</body>

</html>





JSON-LIB
这是把一个bean 或map 或list 或xml 转成json字符串,也能把json字符串转成bean,xml

所依赖的包及下载点如下:

Json-lib: http://json-lib.sourceforge.net/

EZMorph: http://ezmorph.sourceforge.net

Collections: http://jakarta.apache.org/commons/collections/

Commons-Lang: http://jakarta.apache.org/commons/lang/

Commons-BeanUtils:http://commons.apache.org/beanutils/

commons-logging: http://commons.apache.org/logging/

bean、map、list 、xml 与Json 相互转换源码
1 User.java



package javaapplication2;

public class User {

private String no;

private String name;

public User(){}

public void setNo(String no){ this.no=no; }

public String getNo(){ return no; }

public void setName(String name){ this.name=name; }

public String getName(){ return name; }

}



2 test.java



package javaapplication2;

import java.lang.reflect.InvocationTargetException;

import java.util.List;

import java.util.ArrayList;

import java.util.Map;

import java.util.HashMap;

import net.sf.json.JSONObject;

import net.sf.json.JSONArray;

import org.apache.commons.beanutils.PropertyUtils;

import net.sf.json.xml.XMLSerializer;



public class test {

public static void main(String args[]) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException{

// list to jsonstr

List list = new ArrayList();

list.add( "first" );

list.add( "second" );

JSONArray jsonArray = JSONArray.fromObject( list );

System.out.println("----1----" );

System.out.println( jsonArray );

System.out.println();



// map to jsonstr

Map map=new HashMap();

map.put("d", list);

map.put("e", "e1");

JSONObject jobj=JSONObject.fromObject(map);

System.out.println("----2----" );

System.out.println(jobj );

System.out.println();



// bean to jsonstr

User user=new User();

user.setNo("001");

user.setName("李四");

jobj=JSONObject.fromObject(user);

System.out.println("----3----" );

System.out.println( jobj );

System.out.println();



// jsonstr to object

String str="{"d":["first","second"],"e":"e1"}";

jobj=JSONObject.fromObject(str);

System.out.println("----4----" );

System.out.println( jobj.get("d"));

System.out.println();



Object bean = JSONObject.toBean( jobj );

System.out.println("----5----" );

System.out.println(PropertyUtils.getProperty( bean, "d" ) ) ;

System.out.println();



// jsonstr to bean

str="{"name":"李四1","no":"002"}";

jobj=JSONObject.fromObject(str);

user = (User) JSONObject.toBean( jobj, User.class );

System.out.println("----6----" );

System.out.println(user.getName() ) ;

System.out.println();



/**

* XML和JSON之间的转换,需要用到xom

*/

jobj = new JSONObject( true );

XMLSerializer xmls = new XMLSerializer();

String xml = xmls.write(jobj);

System.out.println("***7*** = " + xml);



jobj = JSONObject.fromObject("{"name":"json","bool":true,"int":1}");

xmls = new XMLSerializer();

xml = xmls.write(jobj);

System.out.println("***8*** = " + xml);



jsonArray = JSONArray.fromObject("[1,2,3]");

xmls = new XMLSerializer();

xml = xmls.write( jsonArray );

System.out.println("***9*** = " + xml);



xml = "<a class="array"><e type="function" params="i,j">return matrix[i][j];</e></a> ";

xmls = new XMLSerializer();

jsonArray = (JSONArray) xmls.read( xml);

System.out.println("***10*** = " + jsonArray );



}

}





Ext 之框架篇
Ext2 相关包放在netbean6.1的 web resources下。

<%@page contentType="text/html" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<link rel="stylesheet" type="text/css" href="resources/ext21/resources/css/ext-all.css" />

<script type="text/javascript" src="resources/ext21/adapter/ext/ext-base.js"> </script>

<script type="text/javascript"

src="resources/ext21/ext-all.js"></script>

</head>

<script>

function fn() { alert('Hello World'); }

Ext.onReady(fn);

</script>

<body>

<h2>ss</h2>

</body>

</html>



javaScript调试
下载firefox.

下载fireBug插件。fireFox浏览器中的插件管理器中,可在线安装

Ext2.0之外观改变
Ext2组件的外观分成许多部份,这些部份通过css进行控控制。其中定义了一个核心的css,由baseCls参数指定。其他部份(css)的命名必须前缀baseCls值。当修改了baseCls的值时,ext2自动修改相关css的前缀。



fomPanel外观改变
源代码:aaa.jsp



<%@page contentType="text/html" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<link rel="stylesheet" type="text/css" href="resources/ext21/resources/css/ext-all.css" />

<link rel="stylesheet" type="text/css" href="resources/ext21/resources/css/fyhC.css" />

<script type="text/javascript" src="resources/ext21/adapter/ext/ext-base.js"> </script>

<script type="text/javascript" src="resources/ext21/ext-all.js"></script>

</head>

<script>

Ext.onReady( function (){

var f=new Ext.form.FormPanel({

renderTo:"hello",//定位到名为hello的Div节点

title:"用户信息录入框",

url:"login.do",

baseParams:{aa:"bb"},

baseCls:"fyh-panel",//外观核心参数

itemCls:"fyh-panel-mc",

height:600,

width:800,

labelWidth:200,

labelAlign:"right",

frame:true,

defaults:{width:180,xtype:"textfield"},

items:[

{

xtype:"textfield",

name:"username",

fieldLabel:"姓名"

},

{

xtype:"textfield",

name:"password",

fieldLabel:"密码"

}

],

buttons:[{

text:"加载表单数据"

}]

});

});





</script>

<body>

<div id="hello"/>

</body>

</html>



fyhC.css





fyh-panel {

border:0pt solid yellow;

}

fyh-panel-tl { /* 标题左 */

background:transparent url(../images/default/panel/corners-sprite.gif) no-repeat scroll 0pt 0pt;

border-bottom:1px solid #99BBE8;

padding-left:6px;

}

.x-panel-tr { /* 标题右 */

background:transparent url(../images/default/panel/corners-sprite.gif) no-repeat scroll right 0pt;

padding-right:6px;

}

.fyh-panel-tc { /* 标题正中间 */

background:transparent url(../images/default/dd/drop-add.gif) repeat-x scroll 0pt 0pt;

overflow:hidden;

}

.fyh-panel-tl .fyh-panel-header { /* 标题文本 */

-x-system-font:none;

background:transparent none repeat scroll 0% 0%;

border:0pt none;

color:#15428B;

font-family:tahoma,arial,verdana,sans-serif;

font-size:72px;

font-size-adjust:none;

font-stretch:normal;

font-style:normal;

font-variant:normal;

font-weight:bold;

line-height:normal;

padding:5px 0pt 4px;

}

.fyh-panel-bwrap {

overflow:hidden;

}

.fyh-panel-ml {/* 正中左 */

background:#FFFFFF url(../images/default/panel/left-right.gif) repeat-y scroll 0pt 0pt;

padding-left:6px;

}

.fyh-panel-mr {/* 正中右 */

background:transparent url(../images/default/panel/left-right.gif) repeat-y scroll right 0pt;

padding-right:6px;

}

.fyh-panel-mc {/* 正中 */

-x-system-font:none;

background:red none repeat scroll 0% 0%;

border:0pt none;

font-family:tahoma,arial,helvetica,sans-serif;

font-size:24px;

font-size-adjust:none;

font-stretch:normal;

font-style:normal;

font-variant:normal;

font-weight:normal;

line-height:normal;

margin:0pt;

padding:6px 0pt 0pt;

}

.fyh-panel-body {

overflow:hidden;

}

.fyh-panel-btns-ct {

padding:16px;

}

.fyh-panel-btns-ct .fyh-panel-btns-center {

text-align:center;

}

.fyh-panel-bc .x-panel-footer { /*脚下*/

padding-bottom:6px;

}

.fyh-panel-bl { /*脚左*/

background:transparent url(../images/default/panel/corners-sprite.gif) no-repeat scroll 0pt bottom;

padding-left:6px;

}



.fyh-panel-br { /*脚右*/

background:transparent url(../images/default/panel/corners-sprite.gif) no-repeat scroll right bottom;

padding-right:6px;

}



.fyh-panel-bc { /*脚中*/

background:transparent url(../images/default/panel/top-bottom.gif) repeat-x scroll 0pt bottom;

}



Ext 乱码解决
客记端加入以下语句:Ext.lib.Ajax.defaultPostHeader += '; charset=utf-8';

服务器端加入以下语句:arg1.setContentType("text/json; charset=utf-8");

Ext 得标签或dom节点,与服务器通信
Ext.get、Ext.select得到的节点与Ext.query得到的节点是不一样的。前者,与ext紧密结合;而后者与dom的节点紧密结合

Ext.get与Ext.select得到的节点,有一个load方法,与服务器进行通信。

客户端源码:aaa.jsp

其中

dd.addClass("red”)是在ExtStart.css文件中定义的滤镜

<%@page contentType="text/html" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<link rel="stylesheet" type="text/css" href="resources/ext21/resources/css/ext-all.css" />

<link rel="stylesheet" type="text/css" href="resources/ext21/resources/css/ExtStart.css" />

<script type="text/javascript" src="resources/ext21/adapter/ext/ext-base.js"> </script>

<script type="text/javascript"

src="resources/ext21/ext-all.js"></script>

</head>

<script>

Ext.onReady(function(){

var dd= Ext.get('ss');//得id 值的标签

dd.addClass("red");

dd=Ext.select("h2") ;//得多个节点

dd.addClass("green");

Ext.select('h2').on('click', function() {

alert("hello")

});

var dd1 =Ext.query("#ss");//得id值为ss的dom节点

dd1 =Ext.query("span");//得节点名span的dom节点

dd1 =Ext.query("*[id=bar]");//得节点名span的dom节点

dd1=Ext.query("div ss");//取得div节点中id名为ss的dom节点

dd1 =Ext.query(".bar");//得class为bar的dom节点

dd1 =Ext.query("*");//得所有的dom节点

dd1= Ext.query("*[class^=f]");//得所有class名开头是b的dom节点

dd1= Ext.query("*[class$=r]");//得所有class名结尾是r的dom节点

dd1= Ext.query("*[class*=o]");//得所有class名中有o的dom节点

dd1= Ext.query("*{color=red}");//大括号表示取css中满足

alert(dd1[0].tagName) ;

alert(dd1[0].nodeName);

alert(dd1[0].innerHTML);

var dd= Ext.get('ss');//得id 值为ss的标签

//dd.load与服务器通信

dd.load({url:"login.do", //服务器网址

params: 'aa=bar', text: 'Updating...' }); //向服务器传递参数

dd.show();//更改标签为服务器内容

});



</script>

<body>

<h2>hello</h2>

<div id="ss">dd</div>

<h2 ><a href="http://www.sina.com.cn"> Hello World!</a></h2>

<input id="btn" type="button" name="add" value="新窗口" />

<input id="btnToBack" type="button" name="add" value="放到后台" />

<input id="btnHide" type="button" name="add" value="隐" />

<div id="bar" class="foo">

I'm a div ==> my id: bar, my class: foo

<span class="bar">

I'm a span within the div with a foo class

</span>

<a href="http://www.extjs.com" target="_blank">An ExtJs link</a>

</div>

<div id="foo" class="bar"> my id: foo, my class: bar

<p>I'm a P tag within the foo div</p>

<span class="bar">I'm a span within the div with a bar class</span>

<a href="#">An internal link</a>

</div>

</body>

</html>



服务器端,部份源码:

其中:arg0是HttpServletRequest对象

arg1 是HttpServletResponse对象

完整源码见: ext与服务交互之Ext.Ajax.request

if (arg0.getParameter("aa").equals("bar")){

arg1.getWriter().write(jsonArray.toString());

arg1.getWriter().flush();

}



对话框使用
确定框



<script>

Ext.onReady(function(){

Ext.MessageBox.confirm('登 陆', '确定吗?',fun);

});



function fun(btn) {

if(btn=='yes'){ alert(btn+'ss') }

return false;

}

</script>



消息框



<script>

Ext.onReady(function(){

Ext.MessageBox.alert('Hello', '确定吗',fun);

});

function fun(btn) { alert(btn+'Hello') }

</script>



输入框1

<script>

Ext.onReady(function(){

Ext.MessageBox.prompt('输入框', '随便输入一些东西', fun);

});

function fun(btn,text) {

alert('你刚刚点击了 ' + btn + ',刚刚输入了 ' + text);

}

</script>



输入框2

<script>

Ext.onReady(function(){

Ext.MessageBox.show({

title: '多行输入框',

msg: '你可以输入好几行',

width:300,

buttons: Ext.MessageBox.OKCANCEL,

multiline: true,

fn:fun

});

});

function fun(btn,text) {

alert('你刚刚点击了 ' + btn + ',刚刚输入了 ' + text);

}

</script>



进度条

<script>

Ext.onReady(function(){

Ext.MessageBox.show({

title: '请等待',

msg: '读取数据中',

width:240,

progress:true,

closable:false

});

});



var f = function(v){

return function(){

if(v == 11){

Ext.MessageBox.hide();

}else{

Ext.MessageBox.updateProgress(v/10, '正在读取第 ' + v + ' 个,一共10个。');

}

};

};

for(var i = 1; i < 12; i++){

setTimeout(f(i), i*1000);

}



</script>



布局管理
Panel window 等都可指定布局管理器进行管理界面。

在panel的组件构建对象中,都有一个html属性,它可指一个div子节点。

而ext的大多数组件都可通过renderTo,让该组件挂在html指定节点中,这样就从外观上完成了面板的组件装配任务

表格布局管理器Ext.layout.TableLayou
最看好的一个管理器。像EXCEL一样,把一个板面分成具有统一大小的单元格构成的表格。一个组件在存放时,也可像excel一样合并单元格。即通过合并,让一个组件可占用多个单元格的位置。

表格布局管理器,要先指定总列数,而总行数不用指定。

表格布局管理器,是按先行后列的原则顺序装配对象。注意下面例子中的5678的编号。



例:把9个panel装配到一个panel中去。

效果图


总共是4行3列的表格Dragme1 与dragme6占了两行,而dragme2占了两列,看着怪是因为他们居中了。

Window 一样。把例中的panel改成window就行了

源代码



<%@page contentType="text/html" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<link rel="stylesheet" type="text/css" href="resources/ext21/resources/css/ext-all.css" />

<script type="text/javascript" src="resources/ext21/adapter/ext/ext-base.js"> </script>

<script type="text/javascript" src="resources/ext21/ext-all.js"></script>

</head>

<script>

Ext.onReady( function (){





var dd= new Ext.Panel({

title: 'Drag me',

x: 100,

y: 100,

id:"dd",

renderTo: Ext.getBody(),

floating: true,//注意在ext2.中,在下面的panel中不能指定,否则显//示不出。严重郁闷。不过,也就是一个阴影属性罢了。

frame: true,

width: 350,

height: 300,

layout:"table",//指定了布局管理器为tableLayout

layoutConfig: {//配置对象

//定义了总列数

columns: 3

},

// items 指定了要装配的对象。在这里都通过html装配了一个div

//节点。在这个节点中,将要挂接panel对象。在这个节点中,

//可指定一些css样式,控制要挂接对象的位置大小等。

items: [{

html: '<div id="aa1" ></div>',

rowspan: 2,//占用两行

colspan: 1 //占用一列

},{

html: '<div id="aa2" align=center ></div>',//这里的align=center

//指定了要挂接对象居中显示

rowspan: 1,

colspan: 2

},{

html: '<div id="aa3"></div>',

cellCls: 'highlight',

rowspan: 1,

colspan: 1

},{

html: '<div id="aa4"></div>',

rowspan: 1,

colspan: 1

},{

html: '<div id="aa5"></div>',

rowspan: 1,


本文来自[Svn中文网]转发请保留本站地址:http://www.svn8.com/SVNSY/20080930/1037.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值