﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-java技术-随笔分类-ext</title><link>http://www.blogjava.net/fuhoujun/category/34936.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 20 Jan 2009 14:57:37 GMT</lastBuildDate><pubDate>Tue, 20 Jan 2009 14:57:37 GMT</pubDate><ttl>60</ttl><item><title>Ext框架的Grid使用介绍</title><link>http://www.blogjava.net/fuhoujun/archive/2008/11/02/238151.html</link><dc:creator>付厚俊</dc:creator><author>付厚俊</author><pubDate>Sun, 02 Nov 2008 03:05:00 GMT</pubDate><guid>http://www.blogjava.net/fuhoujun/archive/2008/11/02/238151.html</guid><wfw:comment>http://www.blogjava.net/fuhoujun/comments/238151.html</wfw:comment><comments>http://www.blogjava.net/fuhoujun/archive/2008/11/02/238151.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fuhoujun/comments/commentRss/238151.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fuhoujun/services/trackbacks/238151.html</trackback:ping><description><![CDATA[<p>Ext2.0是一个JS框架，它的Grid控件和其它可以显示数据的控件，能够支持多种数据类型，如二维数组、Json数据和XML数据，甚至包括我们自定义的数据类型。E<font face="Courier New">xt为我们提供了一个桥梁Ext.data.Store，通过它我们可以把任何格式的数据转化成grid可以使用的形式，这样就不需要为每种数据格式写一个grid的实现了。</font></p>
<p><font face="Courier New">首先，一个表格应该有列定义，即定义表头ColumnModel：<br />
<font color="#008000">//<span style="color: #008000"> 定义一个ColumnModel，表头中有四列</span></font><span style="color: #008000"><br />
</span><font face="Courier New"><span style="color: #0000ff">var</span><span style="color: #000000"> cm </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span></font><font face="Courier New"><span style="color: #000000"> Ext.grid.ColumnModel([<br />
&nbsp;&nbsp;&nbsp;&nbsp; {header:</span><span style="color: #000000">'</span><span style="color: #000000">编号</span><span style="color: #000000">'</span><span style="color: #000000">,dataIndex:</span><span style="color: #000000">'</span><span style="color: #000000">id</span><span style="color: #000000">'</span></font><font face="Courier New"><span style="color: #000000">},<br />
&nbsp;&nbsp;&nbsp;&nbsp; {header:</span><span style="color: #000000">'</span><span style="color: #000000">性别</span><span style="color: #000000">'</span><span style="color: #000000">,dataIndex:</span><span style="color: #000000">'</span><span style="color: #000000">sex</span><span style="color: #000000">'</span></font><font face="Courier New"><span style="color: #000000">},<br />
&nbsp;&nbsp;&nbsp;&nbsp; {header:</span><span style="color: #000000">'</span><span style="color: #000000">名称</span><span style="color: #000000">'</span><span style="color: #000000">,dataIndex:</span><span style="color: #000000">'</span><span style="color: #000000">name</span><span style="color: #000000">'</span></font><font face="Courier New"><span style="color: #000000">},<br />
&nbsp;&nbsp;&nbsp;&nbsp; {header:</span><span style="color: #000000">'</span><span style="color: #000000">描述</span><span style="color: #000000">'</span><span style="color: #000000">,dataIndex:</span><span style="color: #000000">'</span><span style="color: #000000">descn</span><span style="color: #000000">'</span></font><font face="Courier New"><span style="color: #000000">}<br />
]);<br />
cm.defaultSortable </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">true</span></font><span style="color: #000000"><font face="Courier New">;<br />
</font></span></font>&nbsp;&nbsp;&nbsp; 该ColumnModel定义了表格的四个列，其每列的名称和对应的数据键。请注意defaultSortable属性，即为每个列都安上一个可以排序的功能。如果只想某些列举有该功能，可以设置：<br />
<font face="Courier New">{header:<span style="color: #000000">'</span><span style="color: #000000">编号</span><span style="color: #000000">'</span><span style="color: #000000">,dataIndex:</span><span style="color: #000000">'</span><span style="color: #000000">id</span><span style="color: #000000">',Sortable:true</span><span style="color: #000000">},</span></font></p>
<p><font face="Courier New">现在就来看看这个<span style="color: #ff0000">Ext.data.Store</span>是如何转换三种数据的。</font></p>
<p><font face="Courier New"><strong>1.二维数组：</strong><br />
<font color="#008000">//<span style="color: #008000"> ArrayData</span></font><span style="color: #008000"><br />
</span><font face="Courier New"><span style="color: #0000ff">var</span><span style="color: #000000"> data </span><span style="color: #000000">=</span></font><font face="Courier New"><span style="color: #000000"> [<br />
&nbsp;&nbsp;&nbsp;&nbsp; [</span><span style="color: #000000">'</span><span style="color: #000000">1</span><span style="color: #000000">'</span><span style="color: #000000">,</span><span style="color: #000000">'</span><span style="color: #000000">male</span><span style="color: #000000">'</span><span style="color: #000000">,</span><span style="color: #000000">'</span><span style="color: #000000">name1</span><span style="color: #000000">'</span><span style="color: #000000">,</span><span style="color: #000000">'</span><span style="color: #000000">descn1</span><span style="color: #000000">'</span></font><font face="Courier New"><span style="color: #000000">],<br />
&nbsp;&nbsp;&nbsp;&nbsp; [</span><span style="color: #000000">'</span><span style="color: #000000">2</span><span style="color: #000000">'</span><span style="color: #000000">,</span><span style="color: #000000">'</span><span style="color: #000000">male</span><span style="color: #000000">'</span><span style="color: #000000">,</span><span style="color: #000000">'</span><span style="color: #000000">name1</span><span style="color: #000000">'</span><span style="color: #000000">,</span><span style="color: #000000">'</span><span style="color: #000000">descn2</span><span style="color: #000000">'</span></font><font face="Courier New"><span style="color: #000000">],<br />
&nbsp;&nbsp;&nbsp;&nbsp; [</span><span style="color: #000000">'</span><span style="color: #000000">3</span><span style="color: #000000">'</span><span style="color: #000000">,</span><span style="color: #000000">'</span><span style="color: #000000">male</span><span style="color: #000000">'</span><span style="color: #000000">,</span><span style="color: #000000">'</span><span style="color: #000000">name3</span><span style="color: #000000">'</span><span style="color: #000000">,</span><span style="color: #000000">'</span><span style="color: #000000">descn3</span><span style="color: #000000">'</span></font><font face="Courier New"><span style="color: #000000">],<br />
&nbsp;&nbsp;&nbsp;&nbsp; [</span><span style="color: #000000">'</span><span style="color: #000000">4</span><span style="color: #000000">'</span><span style="color: #000000">,</span><span style="color: #000000">'</span><span style="color: #000000">male</span><span style="color: #000000">'</span><span style="color: #000000">,</span><span style="color: #000000">'</span><span style="color: #000000">name4</span><span style="color: #000000">'</span><span style="color: #000000">,</span><span style="color: #000000">'</span><span style="color: #000000">descn4</span><span style="color: #000000">'</span></font><font face="Courier New"><span style="color: #000000">],<br />
&nbsp;&nbsp;&nbsp;&nbsp; [</span><span style="color: #000000">'</span><span style="color: #000000">5</span><span style="color: #000000">'</span><span style="color: #000000">,</span><span style="color: #000000">'</span><span style="color: #000000">male</span><span style="color: #000000">'</span><span style="color: #000000">,</span><span style="color: #000000">'</span><span style="color: #000000">name5</span><span style="color: #000000">'</span><span style="color: #000000">,</span><span style="color: #000000">'</span><span style="color: #000000">descn5</span><span style="color: #000000">'</span></font><span style="color: #000000"><font face="Courier New">]<br />
];<br />
<font face="Courier New"><span style="color: #008000">//</span><span style="color: #008000"> ArrayReader</span></font><span style="color: #008000"><br />
</span><font face="Courier New"><span style="color: #0000ff">var</span><span style="color: #000000"> ds </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span></font><font face="Courier New"><span style="color: #000000"> Ext.data.Store({<br />
&nbsp;&nbsp;&nbsp;&nbsp; proxy: </span><span style="color: #0000ff">new</span></font><font face="Courier New"><span style="color: #000000"> <span style="color: #ff0000">Ext.data.MemoryProxy</span>(data),<br />
&nbsp;&nbsp;&nbsp;&nbsp; reader: </span><span style="color: #0000ff">new</span></font><font face="Courier New"><span style="color: #000000"> <span style="color: #ff0000">Ext.data.ArrayReader</span>({}, [<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {name: </span><span style="color: #000000">'</span><span style="color: #000000">id</span><span style="color: #000000">',mapping: 0</span></font><font face="Courier New"><span style="color: #000000">},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {name: </span><span style="color: #000000">'</span><span style="color: #000000">sex</span><span style="color: #000000">',mapping: 1</span></font><font face="Courier New"><span style="color: #000000">},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {name: </span><span style="color: #000000">'</span><span style="color: #000000">name</span><span style="color: #000000">',mapping: 2</span></font><font face="Courier New"><span style="color: #000000">},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {name: </span><span style="color: #000000">'</span><span style="color: #000000">descn</span><span style="color: #000000">',mapping: 3</span></font><span style="color: #000000"><font face="Courier New">}<br />
&nbsp;&nbsp;&nbsp;&nbsp; ])<br />
});<br />
ds.load();<br />
ds要对应两个部分：proxy和reader。proxy告诉我们从哪里获得数据，reader告诉我们如何解析这个数据。<br />
现在用的是Ext.data.MemoryProxy，它将内存中的数据data作为参数传递。Ext.data.ArrayReader专门用来解析数组，并且告诉我们它会按照定义的规范进行解析，每行按顺序读取四个数据，第一个叫id，第二个叫sex，第三个叫name，第四个descn。这些是跟cm定义中的dataIndex对应的。这样cm就知道哪列应该显示那条数据了。<br />
mapping属性用于标记data中的读取后的数据与标头的映射关系，一般是不用设置的。但如果我们想让sex的数据中name栏中出现，可以设置mapping值。即id的mapping为2,后者为0。<br />
记得要执行一次ds.load()，对数据进行初始化。<span style="color: #000000"><br />
</span></font></span></font></span></font></p>
<p><span style="color: #000000"><font face="Courier New"><span style="color: #000000"><font face="Courier New"><span style="color: #000000"><font face="Courier New">数据的显示显得非常简单：<br />
</font></span></font></span></font></span><font face="Courier New"><span style="color: #000000"><font face="Courier New"><span style="color: #000000"><font face="Courier New"><span style="color: #000000">HTML文件：</span></font></span></font></span></font><br />
&lt;div id='grid'&gt;&lt;/div&gt;<br />
JS文件：<span style="color: #008000"><br />
</span><font face="Courier New"><span style="color: #0000ff">var</span><span style="color: #000000"> grid </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span></font><font face="Courier New"><span style="color: #000000"> Ext.grid.GridPanel({<br />
&nbsp;&nbsp;&nbsp;&nbsp; el: </span><span style="color: #000000">'</span><span style="color: #000000">grid</span><span style="color: #000000">'</span></font><span style="color: #000000"><font face="Courier New">,<br />
&nbsp;&nbsp;&nbsp;&nbsp; ds: ds,<br />
&nbsp;&nbsp;&nbsp;&nbsp; cm: cm<br />
});<br />
grid.render();</font></span></p>
<p><font face="Courier New"><span style="color: #000000">其显示结果为：<br />
</span></font></p>
<p><span style="color: #000000"><font face="Courier New"><strong><img src="http://www.dojochina.com/files/20080906201856285.jpg"  alt="" /></strong></font></span></p>
<p><span style="color: #000000"><font face="Courier New"><strong>2.如何在表格中添加CheckBox呢？</strong></font></span></p>
<p><font face="Courier New"><span style="color: #000000"><font color="#ff0000">var sm = new Ext.grid.CheckboxSelectionModel();</font><br />
</span></font><font face="Courier New"><span style="color: #000000">var cm = new Ext.grid.ColumnModel([<br />
&nbsp;&nbsp;&nbsp; <font color="#ff0000">new Ext.grid.RowNumberer(),//自动行号<br />
&nbsp;&nbsp;&nbsp; sm,//添加的地方</font><br />
&nbsp;&nbsp;&nbsp; {header:'编号',dataIndex:'id'},<br />
&nbsp;&nbsp;&nbsp; {header:'性别',dataIndex:'sex'},<br />
&nbsp;&nbsp;&nbsp; {header:'名称',dataIndex:'name'},<br />
&nbsp;&nbsp;&nbsp; {header:'描述',dataIndex:'descn'}<br />
]);</span></font></p>
<p><span style="color: #000000"><font face="Courier New">var grid = new Ext.grid.GridPanel({<br />
&nbsp;&nbsp;&nbsp; el: 'grid3',<br />
&nbsp;&nbsp;&nbsp; ds: ds,<br />
&nbsp;&nbsp;&nbsp; cm: cm,<br />
&nbsp;&nbsp;&nbsp; <font color="#ff0000">sm: sm,//添加的地方</font><br />
&nbsp;&nbsp;&nbsp; title: 'HelloWorld'<br />
});<br />
</font></span></p>
<p><strong><img src="http://www.dojochina.com/files/20080906201900486.jpg"  alt="" /></strong></p>
<p><strong>3. 如何做Grid上触发事件呢？<br />
</strong>下面是一个cellclick事件<br />
<font color="#ff0000">grid.addListener('cellclick', cellclick);</font><br />
function cellclick(grid, rowIndex, columnIndex, e) {<br />
&nbsp;&nbsp;&nbsp; var record = grid.getStore().getAt(rowIndex);&nbsp;&nbsp; //Get the Record<br />
&nbsp;&nbsp;&nbsp; var fieldName = grid.getColumnModel().getDataIndex(columnIndex); //Get field name<br />
&nbsp;&nbsp;&nbsp; var data = record.get(fieldName);<br />
&nbsp;&nbsp;&nbsp; Ext.MessageBox.alert('show','当前选中的数据是'+data);<br />
}</p>
<p><strong>4.如何做Grid中做出快捷菜单效果：</strong><br />
grid.addListener('rowcontextmenu', rightClickFn);//右键菜单代码关键部分<br />
var rightClick = new Ext.menu.Menu({<br />
&nbsp;&nbsp;&nbsp; id:'rightClickCont', <span style="color: #ff0000">//在HTML文件中必须有个rightClickCont的DIV元素</span><br />
&nbsp;&nbsp;&nbsp; items: [<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id: 'rMenu1',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; handler: rMenu1Fn,//点击后触发的事件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; text: '右键菜单1'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //id: 'rMenu2',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //handler: rMenu2Fn,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; text: '右键菜单2'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; ]<br />
});<br />
function rightClickFn(grid,rowindex,e){<br />
&nbsp;&nbsp;&nbsp; e.preventDefault();<br />
&nbsp;&nbsp;&nbsp; rightClick.showAt(e.getXY());<br />
}<br />
function rMenu1Fn(){<br />
&nbsp;&nbsp; Ext.MessageBox.alert('right','rightClick');<br />
}<br />
其Grid如下：<br />
<img src="http://www.dojochina.com/files/20080906201900960.jpg"  alt="" /></p>
<p><strong>5.如何将一列中的数据根据要求进行改变呢？<br />
</strong>比如说性别字段根据其male或female改变显示的颜色，这种ColumnMode中设计：<br />
var cm = new Ext.grid.ColumnModel([<br />
&nbsp;&nbsp;&nbsp; new Ext.grid.RowNumberer(),<br />
&nbsp;&nbsp;&nbsp; sm,<br />
&nbsp;&nbsp;&nbsp; {header:'编号',dataIndex:'id'},<br />
&nbsp;&nbsp;&nbsp; {header:'性别',dataIndex:'sex',renderer:changeSex},<br />
&nbsp;&nbsp;&nbsp; {header:'名称',dataIndex:'name'},<br />
&nbsp;&nbsp;&nbsp; {header:'描述',dataIndex:'descn'}<br />
]);<br />
cm.defaultSortable = true;</p>
<p>function changeSex(value){<br />
&nbsp;&nbsp;&nbsp; if (value == 'male') {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return "&lt;span style='color:red;font-weight:bold;'&gt;红男&lt;/span&gt;";<br />
&nbsp;&nbsp;&nbsp; } else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return "&lt;span style='color:green;font-weight:bold;'&gt;绿女&lt;/span&gt;";<br />
&nbsp;&nbsp;&nbsp; }<br />
}</p>
<p>其它两种数据的Grid显示是相同的，其不同之处在于数据获取的过程：</p>
<p><span style="color: #ff0000"><strong>6.Json数据</strong><br />
至于这种数据的类型请大家自己看Ajax的书籍：</span><br />
//JsonData<br />
var data = { <br />
&nbsp;&nbsp;&nbsp; 'coders': [<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { 'id': '1', 'sex': 'male', 'name':'McLaughlin', 'descn': <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#37;&#50;&#48;&#98;&#114;&#101;&#116;&#116;&#64;&#110;&#101;&#119;&#73;&#110;&#115;&#116;&#97;&#110;&#99;&#101;&#46;&#99;&#111;&#109;"><font color="#6ba4dc"><u>'brett@newInstance.com'</u></font></a> },<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { 'id': '2', 'sex': 'male','name':'Hunter', 'descn': <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#37;&#50;&#48;&#106;&#97;&#115;&#111;&#110;&#64;&#115;&#101;&#114;&#118;&#108;&#101;&#116;&#115;&#46;&#99;&#111;&#109;"><font color="#6ba4dc"><u>'jason@servlets.com'</u></font></a> },<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { 'id': '3', 'sex': 'female','name':'Harold', 'descn': <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#37;&#50;&#48;&#101;&#108;&#104;&#97;&#114;&#111;&#64;&#109;&#97;&#99;&#102;&#97;&#113;&#46;&#99;&#111;&#109;"><font color="#6ba4dc"><u>'elharo@macfaq.com'</u></font></a> },<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { 'id': '4', 'sex': 'male','name':'Harolds', 'descn': <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#37;&#50;&#48;&#101;&#108;&#104;&#97;&#114;&#111;&#115;&#115;&#64;&#109;&#97;&#99;&#102;&#97;&#113;&#46;&#99;&#111;&#109;"><font color="#6ba4dc"><u>'elhaross@macfaq.com'</u></font></a> }<br />
&nbsp;&nbsp;&nbsp; ],<br />
&nbsp;&nbsp;&nbsp; 'musicians': [<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { 'id': '1', 'name': 'Clapton', 'descn': 'guitar' },<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { 'id': '2', 'name': 'Rachmaninoff', 'descn': 'piano' }<br />
&nbsp;&nbsp;&nbsp; ]<br />
}<br />
//ds使用的MemoryProxy对象和JsonReader对象<br />
var ds = new Ext.data.Store({<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proxy: new <span style="color: #ff0000">Ext.data.MemoryProxy</span>(data),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reader: new <span style="color: #ff0000">Ext.data.JsonReader</span>({root: 'coders'}, [<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {name: 'id'},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {name: 'sex'},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {name: 'name'},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {name: 'descn'}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ])<br />
&nbsp;&nbsp;&nbsp; });<br />
ds.load();</p>
<p>var grid = new Ext.grid.GridPanel({<br />
&nbsp;&nbsp;&nbsp; el: 'grid3',<br />
&nbsp;&nbsp;&nbsp; ds: ds,<br />
&nbsp;&nbsp;&nbsp; cm: cm,<br />
&nbsp;&nbsp;&nbsp; sm: sm,<br />
&nbsp;&nbsp;&nbsp; title: 'HelloWorld',<br />
&nbsp;&nbsp;&nbsp; <font color="#ff0000">autoHeight: true</font><span style="color: #ff0000"><font color="#ff0000">//一定要写，否则显示的数据会少一行<br />
</font></span>});<br />
grid.render();<br />
<img src="http://www.dojochina.com/files/20080906201900387.jpg"  alt="" /></p>
<p><span style="color: #ff0000"><strong>7.使用XML数据：<br />
</strong></span>注意，读取XML数据必须在服务器上进行。<br />
XML数据test.xml的内容：<br />
&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;dataset&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;results&gt;2&lt;/results&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;item&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;id&gt;1&lt;/id&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;sex&gt;male&lt;/sex&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;Taylor&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;descn&gt;Coder&lt;/descn&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;/item&gt;<br />
&lt;/dataset&gt;var ds3 = new Ext.data.Store({<br />
&nbsp;&nbsp;&nbsp; url: 'test.xml',&nbsp;&nbsp;<span style="color: #ff0000"> //XML数据<br />
</span>&nbsp;&nbsp;&nbsp; reader: new <span style="color: #ff0000">Ext.data.XmlReader</span>({record: 'item'}, [ <span style="color: #ff0000">//使用XmlReader对象</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {name: 'id'},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {name: 'sex'},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {name: 'name'},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {name: 'descn'}<br />
&nbsp;&nbsp;&nbsp; ])<br />
});<br />
<img src="http://www.dojochina.com/files/20080906201901508.jpg"  alt="" /></p>
<p><span style="color: #ff0000"><strong>8.从服务器获取数据和数据翻页控件</strong><br />
</span>从一个服务器文件，如ASP、JSP或Servlet中获得数据二维Array、JSON或XML数据，也可以被Ext读取，并被Grid显示：<br />
服务器文件data.asp:<br />
<span style="color: #339966">&lt;%<br />
&nbsp;&nbsp;&nbsp; start = cint(request("start"))<br />
&nbsp;&nbsp;&nbsp; limit = cint(request("limit"))</span></p>
<p><span style="color: #339966">&nbsp;&nbsp;&nbsp; dim json<br />
&nbsp;&nbsp;&nbsp; json=cstr("{totalProperty:100,root:[")<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; for i = start to limit + start-1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; json =json + cstr("{'id':'") +cstr(i) + cstr("','name':'name") + cstr(i) + cstr("','descn':'descn") + cstr(i) + cstr("'}")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if i &lt;&gt; limit + start - 1 then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; json =json + ","<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end if<br />
&nbsp;&nbsp;&nbsp; next<br />
&nbsp;&nbsp;&nbsp; json = json +"]}"<br />
&nbsp;&nbsp;&nbsp; response.write(json)<br />
%&gt;</span></p>
<p><span>我们可以看到，这个页面会根据传入的start和limit的不同，返回不同的数据，其实质是个分页的代码。下面是start=0,limit=10的JSON数据：<br />
{totalProperty:100,root:[{'id':'0','name':'name0','descn':'descn0'},{'id':'1','name':'name1','descn':'descn1'},{'id':'2','name':'name2','descn':'descn2'},{'id':'3','name':'name3','descn':'descn3'},{'id':'4','name':'name4','descn':'descn4'},{'id':'5','name':'name5','descn':'descn5'},{'id':'6','name':'name6','descn':'descn6'},{'id':'7','name':'name7','descn':'descn7'},{'id':'8','name':'name8','descn':'descn8'},{'id':'9','name':'name9','descn':'descn9'}]}</span></p>
<p><span>我们使用分页控件来控制Grid的数据：<br />
Ext.onReady(function(){<br />
&nbsp;&nbsp;&nbsp; var sm = new Ext.grid.CheckboxSelectionModel();<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; var cm = new Ext.grid.ColumnModel([<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new Ext.grid.RowNumberer(),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sm,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {header:'编号',dataIndex:'id'},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {header:'性别',dataIndex:'sex'},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {header:'名称',dataIndex:'name'},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {header:'描述',dataIndex:'descn'}<br />
&nbsp;&nbsp;&nbsp; ]);<br />
&nbsp;&nbsp;&nbsp; cm.defaultSortable = true;</span></p>
<p><span>&nbsp;&nbsp;&nbsp; var ds = new Ext.data.Store({<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#ff0000">proxy: new Ext.data.HttpProxy({url:'data.asp'}),<br />
</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reader: new Ext.data.JsonReader({<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; totalProperty: 'totalProperty',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root: 'root'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }, [<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {name: 'id'},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {name: 'name'},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {name: 'descn'}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ])<br />
&nbsp;&nbsp;&nbsp; });<br />
&nbsp;&nbsp;&nbsp; <font color="#ff0000">ds.load({params:{start:0,limit:10}});</font><br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; var grid = new Ext.grid.GridPanel({<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; el: 'grid3',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ds: ds,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cm: cm,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sm: sm,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; title: 'ASP-&gt;JSON',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bbar: new Ext.PagingToolbar({<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pageSize: 10,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; store: ds,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; displayInfo: true,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; displayMsg: '显示第 {0} 条到 {1} 条记录，一共 {2} 条',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; emptyMsg: "没有记录"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tbar: new Ext.PagingToolbar({<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pageSize: 10,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; store: ds,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; displayInfo: true,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; displayMsg: '显示第 {0} 条到 {1} 条记录，一共 {2} 条',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; emptyMsg: "没有记录"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; })<br />
&nbsp;&nbsp;&nbsp; });<br />
&nbsp;&nbsp;&nbsp; grid.render();</span><br />
<span>})<br />
</span></p>
<p><span style="color: #ff0000"><img src="http://www.dojochina.com/files/20080906201901599.jpg"  alt="" /></span></p>
<p><span style="color: #ff0000">10.如何在Grid的上方添加按钮呢？<br />
</span><font color="#000000">添加按钮的关键之处在于tbar或bbar属性设置Toolbar工具条：</font><br />
<span>var grid = new Ext.grid.GridPanel({<br />
&nbsp;&nbsp;&nbsp; el: 'grid3',<br />
&nbsp;&nbsp;&nbsp; ds: ds,<br />
&nbsp;&nbsp;&nbsp; cm: cm,<br />
&nbsp;&nbsp;&nbsp; sm: sm,<br />
&nbsp;&nbsp;&nbsp; title: 'HelloWorld',<br />
<span style="color: #ff0000">&nbsp;&nbsp;&nbsp; tbar: new Ext.Toolbar({ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; items:[ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id:'buttonA' <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,text:"Button A" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,handler: function(){ alert("You clicked Button A"); } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new Ext.Toolbar.SplitButton({})<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id:'buttonB' <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,text:"Button B" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,handler: function(){ alert("You clicked Button B"); } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '-'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id:'buttonc' <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,text:"Button c"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ] <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }) </span><span style="color: #ff0000"><br />
</span>});<br />
<img src="http://www.dojochina.com/files/20080906201901754.jpg"  alt="" /><br />
</span></p>
<p><span><strong>11.将GridPanel放入一个Panel或TabPanel中</strong><br />
var tabs = new Ext.TabPanel({<br />
&nbsp;&nbsp;&nbsp; collapsible: true<br />
&nbsp;&nbsp;&nbsp; ,renderTo: 'product-exceptions'<br />
&nbsp;&nbsp;&nbsp; ,width: 450<br />
&nbsp;&nbsp;&nbsp; ,height:400<br />
&nbsp;&nbsp;&nbsp; ,activeTab: 0<br />
&nbsp;&nbsp;&nbsp; ,items:[<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; title: 'Unmatched'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; title: 'Matched'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; ]<br />
});<br />
tabs.doLayout();</span></p>
<p><span><font color="#ff0000">var panel = new Ext.Panel({<br />
&nbsp;&nbsp;&nbsp; renderTo: 'panel',<br />
&nbsp;&nbsp;&nbsp; title:'panel',<br />
&nbsp;&nbsp;&nbsp; collapsible:true,<br />
&nbsp;&nbsp;&nbsp; width:450,<br />
&nbsp;&nbsp;&nbsp; height:400,<br />
&nbsp;&nbsp;&nbsp; items:[grid] //管理grid<br />
});</font></span></p>
<p><span>Panel必须有DIV存在。其包含的Component有items管理。<br />
</span></p>
<p><span><img src="http://www.dojochina.com/files/20080906201902295.jpg"  alt="" /></span></p>
<img src ="http://www.blogjava.net/fuhoujun/aggbug/238151.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fuhoujun/" target="_blank">付厚俊</a> 2008-11-02 11:05 <a href="http://www.blogjava.net/fuhoujun/archive/2008/11/02/238151.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ext中FormPanel面板及Form控件横排测试(CSS) </title><link>http://www.blogjava.net/fuhoujun/archive/2008/10/15/234416.html</link><dc:creator>付厚俊</dc:creator><author>付厚俊</author><pubDate>Wed, 15 Oct 2008 05:03:00 GMT</pubDate><guid>http://www.blogjava.net/fuhoujun/archive/2008/10/15/234416.html</guid><wfw:comment>http://www.blogjava.net/fuhoujun/comments/234416.html</wfw:comment><comments>http://www.blogjava.net/fuhoujun/archive/2008/10/15/234416.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fuhoujun/comments/commentRss/234416.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fuhoujun/services/trackbacks/234416.html</trackback:ping><description><![CDATA[<div class="content">
<p>在实际的网页开发中，大部分时间都要涉及到Form表单的处理。在Ext框架中也提供了很多这方面的控件，而且还有一个专门的FormPanel布 局，该布局默认为放在面板上面的所有控件都是换行放置，而在实际应用中为了美观，有些需要横排，特别是Radio控件，这个时候就需要我们重新定制这些控 件的布局了，该例子中使用CSS来实现这些功能，先贴出一张效果图。</p>
<p><img height="192" alt="" src="http://www.xlei.net/x/wp-content/uploads/2008/06/005638mlp.jpg" width="420" border="0" /><br />
<code><br />
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;<br />
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;<br />
&lt;title&gt;Ext中FormPanel面板及Form控件横排测试(CSS)&lt;/title&gt;<br />
&lt;link rel="stylesheet" type="text/css" media="all" href="../ext/resources/css/ext-all.css" /&gt;<br />
&lt;style type="text/css" media="all"&gt;<br />
.allow-float {clear:none!important;} /* 允许该元素浮动 */<br />
.stop-float {clear:both!important;} /* 阻止该元素浮动 */<br />
.sex-male {float:left;}<br />
.sex-female {float:left;padding:0 0 0 20px;}<br />
.age-field {float:left;padding:0 0 0 58px;*padding:0 0 0 50px!important;*padding:0 0 0 50px;}<br />
&lt;/style&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;script type="text/javascript" src="../ext/adapter/ext/ext-base.js"&gt;&lt;/script&gt;<br />
&lt;script type="text/javascript" src="../ext/ext-all.js"&gt;&lt;/script&gt;<br />
&lt;script type="text/javascript" src="../ext/build/locale/ext-lang-zh_CN.js"&gt;&lt;/script&gt;<br />
&lt;script type="text/javascript"&gt;Ext.BLANK_IMAGE_URL = '../ext/resources/images/default/s.gif';&lt;/script&gt;<br />
&lt;script type="text/javascript"&gt;<br />
Ext.onReady(function() {<br />
//创建Form面板<br />
var fp = new Ext.form.FormPanel({<br />
buttonAlign:'center',<br />
labelAlign:'right',<br />
labelWidth:40,<br />
frame:true,<br />
bodyStyle:'padding:8px 0 0 0;',<br />
items:[{<br />
xtype:'textfield',<br />
fieldLabel:'姓名',<br />
name:'n_username',<br />
id:'i_username',<br />
width:320<br />
},{<br />
xtype:'radio',<br />
fieldLabel:'性别',<br />
boxLabel:'男',<br />
name:'sex',<br />
id:'male',<br />
itemCls:'sex-male', //向左边浮动,处理控件横排<br />
clearCls:'allow-float', //允许两边浮动,在实际生成的HTML结构中有专门的DIV阻断浮动<br />
checked:true<br />
},{<br />
xtype:'radio',<br />
boxLabel:'女',<br />
name:'sex',<br />
id:'female',<br />
itemCls:'sex-female', //向左浮动,处理控件横排<br />
clearCls:'allow-float', //允许两边浮动<br />
hideLabel:true //不显示前面"性别"的标签<br />
},{<br />
xtype:'textfield',<br />
fieldLabel:'年龄',<br />
name:'n_age',<br />
id:'i_age',<br />
itemCls:'age-field', //向左浮动,处理控件横排<br />
width:133<br />
},{<br />
xtype:'textfield',<br />
fieldLabel:'住址',<br />
name:'n_address',<br />
id:'i_address',<br />
itemCls:'stop-float', //不允许浮动,结束控件横排<br />
width:320<br />
}],<br />
buttons:[{<br />
text:'确定',<br />
handler:onOK //实际应用一般是处理fp.getForm.submit()事件<br />
}, {<br />
text:'重置',<br />
handler:function(){ fp.getForm().reset(); }<br />
}],<br />
keys:[{ //处理键盘回车事件<br />
key:Ext.EventObject.ENTER,<br />
fn:onOK,<br />
scope:this<br />
}]<br />
});</p>
<p>//确定按钮事件,这里只是简单获取各控件值,实际应用一般和后台脚本结合<br />
function onOK() {<br />
var strMsg;<br />
strMsg = &#8216;姓名：&#8217; + fp.getComponent(&#8217;i_username&#8217;).getValue() + &#8216;，性别：&#8217;;<br />
if (fp.getComponent(&#8217;male&#8217;).checked) strMsg += &#8216;男&#8217;;<br />
if (fp.getComponent(&#8217;female&#8217;).checked) strMsg += &#8216;女&#8217;;<br />
strMsg += &#8216;，年龄：&#8217; + fp.getComponent(&#8217;i_age&#8217;).getValue();<br />
strMsg += &#8216;，住址：&#8217; + fp.getComponent(&#8217;i_address&#8217;).getValue();<br />
alert(strMsg);<br />
}</p>
<p>//创建主窗口<br />
new Ext.Window({<br />
title:&#8217;Ext中FormPanel面板及Form控件横排测试(CSS)&#8217;,<br />
width:400,<br />
closable:false,<br />
collapsible:true,<br />
draggable:false,<br />
resizable:false,<br />
modal:true,<br />
border:false,<br />
items:[fp],<br />
buttons:[]<br />
}).show();<br />
});<br />
&lt;/script&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</code></p>
<div class="clear"></div>
</div>
<img src ="http://www.blogjava.net/fuhoujun/aggbug/234416.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fuhoujun/" target="_blank">付厚俊</a> 2008-10-15 13:03 <a href="http://www.blogjava.net/fuhoujun/archive/2008/10/15/234416.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EXT树重新加载</title><link>http://www.blogjava.net/fuhoujun/archive/2008/10/15/234413.html</link><dc:creator>付厚俊</dc:creator><author>付厚俊</author><pubDate>Wed, 15 Oct 2008 04:52:00 GMT</pubDate><guid>http://www.blogjava.net/fuhoujun/archive/2008/10/15/234413.html</guid><wfw:comment>http://www.blogjava.net/fuhoujun/comments/234413.html</wfw:comment><comments>http://www.blogjava.net/fuhoujun/archive/2008/10/15/234413.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/fuhoujun/comments/commentRss/234413.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fuhoujun/services/trackbacks/234413.html</trackback:ping><description><![CDATA[ext js 创建树 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Js代码 <a title="复制代码" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://ext.group.javaeye.com/group/blog/162359#"><img alt="复制代码" src="http://ext.group.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol class="dp-c">
    <li><span><span class="keyword">var</span><span>&nbsp;Tree&nbsp;=&nbsp;Ext.tree; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;deptTree&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Tree.TreePanel({ &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;el&nbsp;:&nbsp;elementId, &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;autoScroll:</span><span class="keyword">true</span><span>, &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;animate:</span><span class="keyword">true</span><span>, &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enableDD:</span><span class="keyword">true</span><span>, &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;containerScroll:&nbsp;</span><span class="keyword">true</span><span>,&nbsp; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loader:&nbsp;</span><span class="keyword">new</span><span>&nbsp;Tree.TreeLoader({ &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataUrl:&nbsp;CONTEXT_PATH&nbsp;+&nbsp;</span><span class="string">"/depts/deptTree.do"</span><span>, &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;baseParams:&nbsp;filter &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}) &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;});&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span><span class="comment">//&nbsp;set&nbsp;the&nbsp;root&nbsp;node </span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;root&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Tree.AsyncTreeNode({ &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text:&nbsp;rootDesc, &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;draggable:</span><span class="keyword">false</span><span>, &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id:</span><span class="string">'-1'</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;}); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;deptTree.setRootNode(root); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span><span class="comment">//&nbsp;render&nbsp;the&nbsp;deptTree </span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;deptTree.render(); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;root.expand();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="js" style="display: none" name="code"> 		var Tree = Ext.tree;
deptTree = new Tree.TreePanel({
el : elementId,
autoScroll:true,
animate:true,
enableDD:true,
containerScroll: true,
loader: new Tree.TreeLoader({
dataUrl: CONTEXT_PATH + "/depts/deptTree.do",
baseParams: filter
})
});
// set the root node
root = new Tree.AsyncTreeNode({
text: rootDesc,
draggable:false,
id:'-1'
});
deptTree.setRootNode(root);
// render the deptTree
deptTree.render();
root.expand();
</pre>
<br />
<br />
ext js 重新加载树 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Js代码 <a title="复制代码" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://ext.group.javaeye.com/group/blog/162359#"><img alt="复制代码" src="http://ext.group.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol class="dp-c">
    <li><span><span>&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp;</span></li>
    <li><span><span class="comment">&nbsp;*&nbsp;重新加载树 </span>&nbsp;</span></li>
    <li><span><span class="comment">&nbsp;*&nbsp; </span>&nbsp;</span></li>
    <li><span><span class="comment">&nbsp;*&nbsp;@param&nbsp;{f} </span>&nbsp;</span></li>
    <li><span><span class="comment">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f&nbsp;过滤树的条件&nbsp;如:{placeid:'xxxxx'} </span>&nbsp;</span></li>
    <li><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></span></li>
    <li><span>reload&nbsp;:&nbsp;</span><span class="keyword">function</span><span>&nbsp;(f){ &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;filter&nbsp;=&nbsp;f; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;loader&nbsp;=&nbsp;deptTree.getLoader(); &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;deptTree.on(</span><span class="string">'beforeload'</span><span>,&nbsp;</span><span class="keyword">function</span><span>(){&nbsp; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loader.dataUrl&nbsp;=&nbsp;loader.dataUrl&nbsp;; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loader.baseParams&nbsp;=&nbsp;filter; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;root.reload();&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<img src ="http://www.blogjava.net/fuhoujun/aggbug/234413.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fuhoujun/" target="_blank">付厚俊</a> 2008-10-15 12:52 <a href="http://www.blogjava.net/fuhoujun/archive/2008/10/15/234413.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ext中树结构带复选框的处理</title><link>http://www.blogjava.net/fuhoujun/archive/2008/10/10/233673.html</link><dc:creator>付厚俊</dc:creator><author>付厚俊</author><pubDate>Fri, 10 Oct 2008 13:43:00 GMT</pubDate><guid>http://www.blogjava.net/fuhoujun/archive/2008/10/10/233673.html</guid><wfw:comment>http://www.blogjava.net/fuhoujun/comments/233673.html</wfw:comment><comments>http://www.blogjava.net/fuhoujun/archive/2008/10/10/233673.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fuhoujun/comments/commentRss/233673.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fuhoujun/services/trackbacks/233673.html</trackback:ping><description><![CDATA[在Faceye基础版(开源)中,使用了大量的树结构,比如台台管理树,用户RSS订阅及分类树,用户博客分类对,网址导航分类树,开源项目分类树,博客管理树等大量的树形结构,甚至在用户授权,用户分组,资料分类等也都使用了树结构,树结构的处理,在Faceye中相比比较成熟，这些，是基于前期项目中对Struts-menu，Dtree等处理 <br />
关于Struts－Menu，Dtree的处理，在我早期的博客中都有描述． <br />
<br />
带有复选框的树，在实际的项目中，特别是授权结构中，有大量的使用．我们来看一下Faceye中如何处理这种带复选框的树形结构． <br />
<br />
首先，Faceye使用了Ext的树解决方案，所以，所有的数据结构，均转化为Ext中树解决方案的数据结构．在这里，我们可以很方便的把这一结构转化为其它树支持的数据结构，比如Strus-menu,dtreee等． <br />
下面是对树完整的脚本处理代码． <br />
［code] <br />
/** <br />
*RoleController <br />
* 角色访问权限管理 <br />
* 管理角色对模块的访问权限 <br />
* www.faceye.com网络支持系统 <br />
* 作者:宋海鹏 ecsun@sohu.com/myecsun@hotmail.com <br />
*/ <br />
Ext.BLANK_IMAGE_URL = 'scripts/ext/resources/images/vista/s.gif'; <br />
com.faceye.compoents.core.security.RoleVisiteModelPermission={ <br />
init:function(roleId){ <br />
Ext.QuickTips.init(); <br />
if(Ext.getCmp('tree')){ <br />
Ext.get('tree-viewer').remove(true); <br />
// Ext.getCmp('tree').destroy(this); <br />
Ext.getBody().createChild({tag:'div',id:'tree-viewer'}); <br />
} <br />
var tree; <br />
var root; <br />
// if(!tree){ <br />
var Tree = Ext.tree; <br />
tree = new Ext.tree.TreePanel( <br />
{ <br />
el:'tree-viewer', <br />
id:'tree', <br />
autoScroll:true, <br />
animate:true, <br />
border:false, <br />
enableDD:true, <br />
containerScroll: true, <br />
rootVisible:false, <br />
loader: new Ext.tree.TreeLoader({ <br />
dataUrl:'/faceye/treeAction.do?method=treeWithCheckBoxForPermission&amp;roleId='+roleId <br />
// uiProviders:{ <br />
// 'col': Ext.ux.CheckColumnNodeUI <br />
// } <br />
}) <br />
// columns:[{ <br />
//// header:'node', <br />
// dataIndex:'name' <br />
// }] <br />
// <br />
} <br />
); <br />
//Defint node click event,when node is clicked,send data to inner 'div' and show data in <br />
// set the root node <br />
root = new Tree.AsyncTreeNode({ <br />
text: 'Common Platform', <br />
draggable:false, <br />
id:'source', <br />
checked:true <br />
// uiProvider: Ext.tree.CheckboxNodeUI <br />
}); <br />
tree.setRootNode(root); <br />
/** <br />
*Open node URL in a target contanier <br />
*/ <br />
//全部展开 <br />
tree.expandAll(); <br />
tree.on('checkchange',function(node){ <br />
if(!node.isLeaf()){ <br />
node.toggle(); <br />
} <br />
fireCheckChange(node); <br />
// node.cascade(function(n){ <br />
// n.getUI().toggleCheck(); <br />
// }); <br />
<br />
}); <br />
<br />
/** <br />
* 当fire checkchange时执行 <br />
*/ <br />
function fireCheckChange(node){ <br />
if(node.getUI().isChecked()){ <br />
checkedChildrenNodes(node); <br />
checkedParentNodes(node); <br />
}else{ <br />
//取得当前节点的所有子节点,包括当前节点 <br />
var allChildrenNodes=getAllChildrenNodes(node); <br />
//如果当前节点的所有子节点中,不存在checked=true的节点,那么将当前节点置为checked=false. <br />
// <br />
//如果当前节点有子节点,同时,当前节点checked=false,那么将其所有子节点置为checked=false <br />
for(var i=0;i&lt;allChildrenNodes.length;i++){ <br />
if(allChildrenNodes[i].getUI().isChecked()){ <br />
allChildrenNodes[i].getUI().toggleCheck(); <br />
<br />
} <br />
} <br />
unCheckedParentNode(node); <br />
} <br />
} <br />
<br />
/** <br />
* 当点击父节点时 <br />
* 将其所有子节点选中 <br />
*/ <br />
function checkedChildrenNodes(node){ <br />
//取得本节点的所有子节点,子节点中包括其自己 <br />
var allChildrenNodes=getAllChildrenNodes(node); <br />
if(allChildrenNodes.length&gt;1){ <br />
for(var i=0;i&lt;allChildrenNodes.length;i++){ <br />
if(!allChildrenNodes[i].getUI().isChecked()){ <br />
allChildrenNodes[i].getUI().toggleCheck(); <br />
} <br />
} <br />
} <br />
} <br />
<br />
/** <br />
* 当当前子节点的父节点的所有子节点中 <br />
* 不存在checked=true的子节点时,父节点不被选中 <br />
*/ <br />
function unCheckedParentNode(currentChildNode){ <br />
if(currentChildNode.parentNode){ <br />
var parentNode=currentChildNode.parentNode; <br />
//取得本父节点下所有被选中的子节点 <br />
//包括本父节点本身 <br />
var allCheckedChildrenNodes=getCheckedNodes(parentNode); <br />
if(allCheckedChildrenNodes.length === 1){ <br />
parentNode.getUI().toggleCheck(); <br />
parentNode.attributes.checked=false; <br />
} <br />
if(parentNode.parentNode){ <br />
unCheckedParentNode(parentNode); <br />
} <br />
} <br />
} <br />
/** <br />
* 当点击子节点时 <br />
* 将父节点选中 <br />
*/ <br />
function checkedParentNodes(node){ <br />
//取得本节点的所有父节点,父节点中包括其自己 <br />
var allParentNodes=getAllParentNodes(node); <br />
if(allParentNodes.length&gt;1){ <br />
for(var i=0;i&lt;allParentNodes.length;i++){ <br />
if(!allParentNodes[i].getUI().isChecked()){ <br />
allParentNodes[i].getUI().toggleCheck(); <br />
} <br />
} <br />
} <br />
} <br />
/** <br />
* 取得所有子节点中checked 为true的节点ID <br />
* 包括本节点 <br />
*/ <br />
function getCheckedNodesId(node){ <br />
var checked = []; <br />
if( node.getUI().isChecked() || node.attributes.checked ) { <br />
// alert('dfdf'+node.childNodes.length); <br />
checked.push(node.id); <br />
if( !node.isLeaf() ) { <br />
for(var i = 0; i &lt; node.childNodes.length; i++ ) { <br />
checked = checked.concat( getCheckedNodesId(node.childNodes[i]) ); <br />
} <br />
} <br />
} <br />
return checked; <br />
}; <br />
/** <br />
* 取得所有子节点中checked为true的节点(TreeNode) <br />
* 包括本节点 <br />
*/ <br />
function getCheckedNodes(node){ <br />
var checked = []; <br />
if( node.getUI().isChecked() ) { <br />
checked.push(node); <br />
if( !node.isLeaf() ) { <br />
for(var i = 0; i &lt; node.childNodes.length; i++ ) { <br />
checked = checked.concat( getCheckedNodes(node.childNodes[i]) ); <br />
} <br />
} <br />
} <br />
return checked; <br />
}; <br />
<br />
/** <br />
* 取得一个节点的所有子节点 <br />
* 包括本节点 <br />
*/ <br />
function getAllChildrenNodes(node){ <br />
var children = []; <br />
children.push(node); <br />
if(!node.isLeaf()){ <br />
for(var i=0;i&lt;node.childNodes.length;i++){ <br />
children = children.concat(getAllChildrenNodes(node.childNodes[i])); <br />
} <br />
} <br />
return children; <br />
}; <br />
/** <br />
* 取得一个节点的所有父节点 <br />
* <br />
*/ <br />
function getAllParentNodes(node){ <br />
var parentNodes=[]; <br />
parentNodes.push(node); <br />
if(node.parentNode){ <br />
parentNodes = parentNodes.concat(getAllParentNodes(node.parentNode)); <br />
} <br />
return parentNodes; <br />
}; <br />
/** <br />
* 取得所有checked=true的节点ID <br />
*/ <br />
<br />
function getAllChecked(){ <br />
return getCheckedNodesId(root); <br />
} <br />
tree.on('click', function (node){ <br />
if(node.isLeaf()){ <br />
// Ext.get('content-iframe').dom.src = node.attributes.link+'&amp;node='+node.id; <br />
//define grid; <br />
return true; <br />
}else{ <br />
/** <br />
*open node by single click,not double click. <br />
*/ <br />
node.toggle(); <br />
} <br />
}); <br />
<br />
tree.on('dblclick',function(node){ <br />
if(node.isLeaf()){ <br />
return true; <br />
}else{ <br />
node.toggle(); <br />
fireCheckChange(node); <br />
// this.fireEvent('checkchange', this.node, true); <br />
} <br />
}); <br />
// render the tree <br />
// } <br />
<br />
tree.render(); <br />
root.expand(); <br />
var win=new Ext.Window({ <br />
layout:'fit', <br />
//模式窗口 <br />
modal:true, <br />
width:450, <br />
height:300, <br />
closeAction:'hide', <br />
plain: true, <br />
// margins:'5 5 5 5', <br />
<br />
title:'为角色授权', <br />
buttonAlign:'center', <br />
buttons: [{ <br />
text:'确定', <br />
scope:com.faceye.compoents.core.security.SelectRoles, <br />
type:'submit', <br />
disabled:false, <br />
handler:function(){ <br />
var checked=getAllChecked().join(','); <br />
Ext.Ajax.request({ <br />
url:'/faceye/roleAction.do?method=permission', <br />
failure:function(){ <br />
Ext.Msg.alert('角色授权','角色授权失败！'); <br />
win.hide(); <br />
}, <br />
success:function(){ <br />
Ext.Msg.alert('角色授权','角色授权成功！'); <br />
win.hide(); <br />
}, <br />
params:{ <br />
treeIds:checked, <br />
roleId:roleId <br />
} <br />
}); <br />
<br />
} <br />
},{ <br />
text: '放弃', <br />
handler: function(){ <br />
// 　 formItemSelector.getForm().reset(); <br />
if(win.getComponent('tree')){ <br />
// Ext.get('tree-viewer').remove(); <br />
// win.destroy(); <br />
// win.remove(tree); <br />
<br />
} <br />
win.hide(); <br />
// win.disable(); <br />
// tree.disable(); <br />
} <br />
} <br />
] <br />
}); <br />
<br />
win.add(tree); <br />
win.show(); <br />
} <br />
}; <br />
<br />
[/code] <br />
<br />
在带有复选框的树形结构处理中，主要需要解决这么几个问题： <br />
１.我们的树，是无限级别的 <br />
２.当选中父节点时，其所有子节点，包括直接子节点和间接子节点，一并选中 <br />
３.当一个节点的所有子节点被取消选中状态时，其父节点要处于未被选中的状态． <br />
<br />
因为树向来是子子孙孙无穷尽的一个东西，所以在这里，需要用到比较多的递归处理，不管是在脚本方面，还是在后台代码里，都需要用到一些递归处理，比如我们所提供的方法中： <br />
[code] /** * 取得一个节点的所有父节点 * */ function getAllParentNodes(node){ var parentNodes=[]; parentNodes.push(node); if(node.parentNode){ parentNodes = parentNodes.concat(getAllParentNodes(node.parentNode)); } return parentNodes; }; [/code] <br />
在这里，提供了这样一样功能，既：取得当前点击（选中）节点的所有父节点，这些父节点中，包括直接父节点和间接父节点，也就是说，在这里，会取得当前选中节点的父亲节点，父亲节点的父亲节点....一直到根节点为止． <br />
<br />
类似的方法有： <br />
[code] /** * 取得一个节点的所有子节点 * 包括本节点 */ function getAllChildrenNodes(node){ var children = []; children.push(node); if(!node.isLeaf()){ for(var i=0;i&lt;node.childNodes.length;i++){ children = children.concat(getAllChildrenNodes(node.childNodes[i])); } } return children; }; [/code] <br />
<br />
这是取得一个节点所有子节点的方法．处理跟上面类似． <br />
<br />
通过以上这些处理，我们就可以很方便的处理带复选框的树形结构． <br />
而在这里，我们最终真正关心的，是那些被我们选中的节点，于是，我们需要取得所有被选中的节点，在这里我们需要使用另外一个方法： <br />
［code] <br />
/** <br />
* 取得所有子节点中checked为true的节点(TreeNode) <br />
* 包括本节点 <br />
*/ <br />
function getCheckedNodes(node){ <br />
var checked = []; <br />
if( node.getUI().isChecked() ) { <br />
checked.push(node); <br />
if( !node.isLeaf() ) { <br />
for(var i = 0; i &lt; node.childNodes.length; i++ ) { <br />
checked = checked.concat( getCheckedNodes(node.childNodes[i]) ); <br />
} <br />
} <br />
} <br />
return checked; <br />
}; <br />
[/code] <br />
在这里，我们同样使用到了递归． <br />
<br />
同时，我们可以看到，在生成树的时候，我们使用了这样一个loader: <br />
［code] <br />
loader: new Ext.tree.TreeLoader({ <br />
dataUrl:'/faceye/treeAction.do?method=treeWithCheckBoxForPermission&amp;roleId='+roleId <br />
// uiProviders:{ <br />
// 'col': Ext.ux.CheckColumnNodeUI <br />
// } <br />
}) <br />
[/code] <br />
这是我们从后台取数据的方法，同时，要在前台加入check column <br />
要加入check column,我们需要看以下代码： <br />
在方法：treeWithCheckBoxForPermission中，我们做了以下操作： <br />
［code] <br />
/** <br />
* 构造带有checkbox的tree,为角色进行节点授权做准备 <br />
* @param mapping <br />
* @param form <br />
* @param request <br />
* @param response <br />
* @return <br />
*/ <br />
public ActionForward treeWithCheckBoxForPermission(ActionMapping mapping, ActionForm form, <br />
HttpServletRequest request, HttpServletResponse response) { <br />
String json = ""; <br />
// JSONArray ja=new JSONArray(); <br />
String roleId=this.getHttp().getParameter(request, "roleId"); <br />
if (super.getHttp().getParameter(request, "node").equals("source")) { <br />
json = this.getTreeService().treeJSONWithCheckBox(roleId); <br />
} else { <br />
String currentNode = super.getHttp().getParameter(request, "node"); <br />
json = this.getTreeService().treeJSONWithCheckBox( <br />
this.getTreeService().getTransedTrees(), <br />
currentNode,roleId); <br />
} <br />
super.jsonPrint(response, json); <br />
// return mapping.findForward("system.admin.face"); <br />
return null; <br />
} <br />
[/code] <br />
在这里，我们主要对原始的树形结构进行了处理，在每个节点上面，打上了checkbox标识： <br />
[code] public String treeJSONWithCheckBox(Serializable roleId) { // TODO Auto-generated method stub try { List trees = this.getTransedTrees(); String result = this.treeJSONWithCheckBox(trees, roleId); return result; } catch (Exception e) { log.info("&gt;&gt;&gt;&gt;faceye error in method:treeJSON() is" + e.toString()); return null; } } [/code] <br />
<br />
这里最主要的一个方法是： <br />
[code] public String treeJSONWithCheckBox(List source, Serializable roleId) { // TODO Auto-generated method stub if (source == null || source.isEmpty()) { return null; } List roots = this.getRoots(source); Iterator it = roots.iterator(); StringBuffer json = new StringBuffer(); json.append("["); while (it.hasNext()) { Map item = (Map) it.next(); json.append(this.transTree2JSONWithCheckBox(source, item, roleId)); json.append(","); } json.deleteCharAt(json.lastIndexOf(",")); json.append("]"); return json.toString(); } [/code] <br />
<br />
在这里，我们调用了最终方法： <br />
［code] <br />
transTree2JSONWithCheckBox <br />
[/code] <br />
对树结构进行最终处理 <br />
［code] <br />
private String transTree2JSONWithCheckBox(List source, Map tree, <br />
Serializable roleId) { <br />
StringBuffer json = new StringBuffer(); <br />
json.append("{"); <br />
json.append("\"text\":"); <br />
json.append("\""); <br />
json.append(tree.get(StringPool.TREE_NAME).toString()); <br />
json.append("\""); <br />
json.append(","); <br />
json.append("\"id\":"); <br />
json.append("\""); <br />
json.append(tree.get(StringPool.TREE_ID).toString()); <br />
json.append("\""); <br />
json.append(","); <br />
json.append("\"leaf\":"); <br />
if (this <br />
.isHaveChildren(source, tree.get(StringPool.TREE_ID).toString())) { <br />
json.append("false"); <br />
} else { <br />
json.append("true"); <br />
} <br />
json.append(","); <br />
json.append("\"cls\":"); <br />
json.append("\"file\""); <br />
if (tree.containsKey(StringPool.TREE_ACTION) <br />
&amp;&amp; null != tree.get(StringPool.TREE_ACTION)) { <br />
json.append(","); <br />
json.append("\"link\":"); <br />
json.append("\""); <br />
json.append(tree.get(StringPool.TREE_ACTION).toString()); <br />
json.append("\""); <br />
} else { <br />
json.append(","); <br />
json.append("\"link\":"); <br />
json.append("\""); <br />
json.append("#"); <br />
json.append("\""); <br />
} <br />
<br />
json.append(","); <br />
json.append("\"checked\":"); <br />
// json.append("true"); <br />
json.append(this.isNodeChecked(tree.get(StringPool.TREE_ID).toString(), <br />
roleId)); <br />
<br />
json.append("}"); <br />
return json.toString(); <br />
} <br />
[/code] <br />
可以看到，我们在这里，加入了：[code]checked:true[/code]这样的属性． <br />
至此，可以看到完整的带有复选框的树形结构的处理流程，完整代码，请从　http://code.google.com/p/faceye下载． <br />
<img src ="http://www.blogjava.net/fuhoujun/aggbug/233673.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fuhoujun/" target="_blank">付厚俊</a> 2008-10-10 21:43 <a href="http://www.blogjava.net/fuhoujun/archive/2008/10/10/233673.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Eclipse+spket开发Spket的安装</title><link>http://www.blogjava.net/fuhoujun/archive/2008/10/07/232881.html</link><dc:creator>付厚俊</dc:creator><author>付厚俊</author><pubDate>Tue, 07 Oct 2008 04:11:00 GMT</pubDate><guid>http://www.blogjava.net/fuhoujun/archive/2008/10/07/232881.html</guid><wfw:comment>http://www.blogjava.net/fuhoujun/comments/232881.html</wfw:comment><comments>http://www.blogjava.net/fuhoujun/archive/2008/10/07/232881.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fuhoujun/comments/commentRss/232881.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fuhoujun/services/trackbacks/232881.html</trackback:ping><description><![CDATA[<p>1、Plugin:<br />
最低要求： eclipse平台运行时3.2.x ,<br />
文件为： <span style="color: #095c83"><a href="http://www.spket.com/downloads/spket-1.6.4.1.zip" target="_blank">spket-1.6.4.1.zip</a></span>(与别的插件的安装无异，相信不用我多说了吧<br />
2、Spket IDE:<br />
最低要求：你需要java 1.5或更高版本运行安装程序，可独立使用(不用装Eclipse<br />
文件为：<a href="http://www.spket.com/downloads/spket-1.6.4.1.jar" target="_blank"><span style="color: #095c83">spket-1.6.4.1.jar</span></a><br />
安装步骤:1、打开cmd，2、在spket-1.6.4.1.jar文件目录下输入java -jar spket-1.6.4.1.jar2、Spket IDE:<br />
最低要求：你需要java 1.5或更高版本运行安装程序，可独立使用(不用装Eclipse<br />
文件为：spket-1.6.4.1.jar<br />
安装步骤:1、打开cmd，2、在spket-1.6.4.1.jar文件目录下输入java -jar spket-1.6.4.1.jar</p>
<p>二、使用</p>
<p>安装完后你去试，发现没有用，其实还有一些操作如下：</p>
<p>1、执行这个操作：Window &#8594; Preferences &#8594; Spket &#8594; JavaScript Profiles &#8594; New</p>
<p>2、在弹出框中输入ExtJs,然后点OK。</p>
<p>3、然后选择ExtJs点Add Library,把你下载的ext包中找到/source/ext.jsb加载进来</p>
<p>4、然后先中ExtJs点击右边的default按钮.</p>
<p>5、然后点击确定就搞定。你现在有eclipse中建立一个JS用Ext.就会出现提示咯！！！</p>
<img src ="http://www.blogjava.net/fuhoujun/aggbug/232881.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fuhoujun/" target="_blank">付厚俊</a> 2008-10-07 12:11 <a href="http://www.blogjava.net/fuhoujun/archive/2008/10/07/232881.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ext  Form布局</title><link>http://www.blogjava.net/fuhoujun/archive/2008/10/07/232879.html</link><dc:creator>付厚俊</dc:creator><author>付厚俊</author><pubDate>Tue, 07 Oct 2008 03:51:00 GMT</pubDate><guid>http://www.blogjava.net/fuhoujun/archive/2008/10/07/232879.html</guid><wfw:comment>http://www.blogjava.net/fuhoujun/comments/232879.html</wfw:comment><comments>http://www.blogjava.net/fuhoujun/archive/2008/10/07/232879.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fuhoujun/comments/commentRss/232879.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fuhoujun/services/trackbacks/232879.html</trackback:ping><description><![CDATA[<br />
<img height="169" src="http://images.cnblogs.com/cnblogs_com/qianxudetianxia/2008-08-05_222230.gif" width="323" onload="attachimg(this, 'load');" border="0" &nbsp;  alt="" /><br />
现在我们要实现的效果是：<font color="red">点击确定，把值传到另一页面！，如下：<br />
<img style="cursor: pointer" onclick="zoom(this)" height="204" src="http://images.cnblogs.com/cnblogs_com/qianxudetianxia/2008-08-05_222755.gif" width="576" onload="attachimg(this, 'load');" border="0" &nbsp; resized="true"  alt="" /><br />
<font color="#000000">原页面js代码为：<br />
<font color="#000000">Ext.onReady(</font><font color="#0000ff">function</font><font color="#000000">(){<br />
&nbsp; Ext.QuickTips.init();<br />
&nbsp; </font><font color="#0000ff">var</font><font color="#000000"> form</font><font color="#000000">=</font><font color="#0000ff">new</font><font color="#000000"> Ext.FormPanel({<br />
&nbsp; &nbsp; frame:</font><font color="#0000ff">true</font><font color="#000000">,<br />
&nbsp; &nbsp; width:</font><font color="#000000">300</font><font color="#000000">,<br />
&nbsp; &nbsp; </font><font color="#008000">//</font><font color="#008000">monitorValid:true,//绑定验证</font><font color="#008000"><br />
</font><font color="#000000">&nbsp; &nbsp; layout:</font><font color="#000000">"</font><font color="#000000">form</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; labelWidth:</font><font color="#000000">70</font><font color="#000000">,<br />
&nbsp; &nbsp; title:</font><font color="#000000">"</font><font color="#000000">添加个人信息</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; labelAlign:</font><font color="#000000">"</font><font color="#000000">left</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; renderTo:Ext.getBody(),<br />
&nbsp; &nbsp; submit: </font><font color="#0000ff">function</font><font color="#000000">(){<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </font><font color="#0000ff">this</font><font color="#000000">.getEl().dom.action </font><font color="#000000">=</font><br />
<font color="#000000">'</font><font color="#000000">GetForm.aspx</font><font color="#000000">'</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </font><font color="#0000ff">this</font><font color="#000000">.getEl().dom.method</font><font color="#000000">=</font><font color="#000000">'</font><font color="#000000">POST</font><font color="#000000">'</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </font><font color="#0000ff">this</font><font color="#000000">.getEl().dom.submit();<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },<br />
&nbsp; &nbsp; items:[{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xtype:</font><font color="#000000">"</font><font color="#000000">textfield</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fieldLabel:</font><font color="#000000">"</font><font color="#000000">用户名</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </font><font color="#008000">//</font><font color="#008000">id:"UserName",</font><font color="#008000"><br />
</font><font color="#000000">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; allowBlank:</font><font color="#0000ff">false</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; blankText:</font><font color="#000000">"</font><font color="#000000">不能为空，请正确填写</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name:</font><font color="#000000">"</font><font color="#000000">UserName</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; anchor:</font><font color="#000000">"</font><font color="#000000">90%</font><font color="#000000">"</font><font color="#000000"><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xtype:</font><font color="#000000">"</font><font color="#000000">textfield</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fieldLabel:</font><font color="#000000">"</font><font color="#000000">昵称</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </font><font color="#008000">//</font><font color="#008000">id:"SmallName",</font><font color="#008000"><br />
</font><font color="#000000">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name:</font><font color="#000000">"</font><font color="#000000">SmallName</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; anchor:</font><font color="#000000">"</font><font color="#000000">90%</font><font color="#000000">"</font><font color="#000000"><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xtype:</font><font color="#000000">"</font><font color="#000000">datefield</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fieldLabel:</font><font color="#000000">"</font><font color="#000000">注册日期</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </font><font color="#008000">//</font><font color="#008000">id:"RegDate",</font><font color="#008000"><br />
</font><font color="#000000">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name:</font><font color="#000000">"</font><font color="#000000">RegDate</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; anchor:</font><font color="#000000">"</font><font color="#000000">90%</font><font color="#000000">"</font><font color="#000000"><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }],<br />
&nbsp; &nbsp; &nbsp; </font><font color="#000000">});</font><br />
接受页面GetForm.aspx的cs代码为：<br />
<font color="#0000ff">protected</font><br />
<font color="#0000ff">void</font><font color="#000000"> Page_Load(</font><font color="#0000ff">object</font><font color="#000000"> sender, EventArgs e)<br />
&nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; </font><font color="#0000ff">string</font><font color="#000000"> UserName </font><font color="#000000">=</font><font color="#000000"> Request.Form[</font><font color="#800000">"</font><font color="#800000">UserName</font><font color="#800000">"</font><font color="#000000">];<br />
&nbsp; &nbsp; &nbsp; &nbsp; </font><font color="#0000ff">string</font><font color="#000000"> SmallName </font><font color="#000000">=</font><font color="#000000"> Request.Form[</font><font color="#800000">"</font><font color="#800000">SmallName</font><font color="#800000">"</font><font color="#000000">];<br />
&nbsp; &nbsp; &nbsp; &nbsp; </font><font color="#0000ff">string</font><font color="#000000"> RegDate </font><font color="#000000">=</font><font color="#000000"> Request.Form[</font><font color="#800000">"</font><font color="#800000">RegDate</font><font color="#800000">"</font><font color="#000000">];<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; Response.Write(UserName </font><font color="#000000">+</font><br />
<font color="#800000">"</font><font color="#800000">&lt;br/&gt;</font><font color="#800000">"</font><br />
<font color="#000000">+</font><font color="#000000"> SmallName </font><font color="#000000">+</font><br />
<font color="#800000">"</font><font color="#800000">&lt;br/&gt;</font><font color="#800000">"</font><br />
<font color="#000000">+</font><font color="#000000"> RegDate);<br />
&nbsp; &nbsp; }</font><br />
因为很简单，我做个简要说明： <font color="#008000">//</font><font color="#008000">几点说明</font><font color="#008000"><br />
</font><font color="#000000">1</font><font color="#000000">.首先定义submit参数的执行函数，即：<br />
&nbsp; submit: </font><font color="#0000ff">function</font><font color="#000000">(){<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </font><font color="#0000ff">this</font><font color="#000000">.getEl().dom.action </font><font color="#000000">=</font><br />
<font color="#000000">'</font><font color="#000000">GetForm.aspx</font><font color="#000000">'</font><font color="#000000">,</font><font color="#008000">//</font><font color="#008000">转向页面地址</font><font color="#008000"><br />
</font><br />
<font color="#0000ff">this</font><font color="#000000">.getEl().dom.method</font><font color="#000000">=</font><font color="#000000">'</font><font color="#000000">POST</font><font color="#000000">'</font><font color="#000000">,</font><font color="#008000">//</font><font color="#008000">方式</font><font color="#008000"><br />
</font><br />
<font color="#0000ff">this</font><font color="#000000">.getEl().dom.submit();</font><font color="#008000">//</font><font color="#008000">提交！</font><font color="#008000"><br />
</font><font color="#000000">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },<br />
</font><font color="#000000">2</font><font color="#000000">.为按钮添加触发相应的提交（取消）事件（这样就不是默认的ajax提交）：<br />
&nbsp; buttons:[{text:</font><font color="#000000">"</font><font color="#000000">确定</font><font color="#000000">"</font><font color="#000000">,handler:login,formBind:</font><font color="#0000ff">true</font><font color="#000000">},{text:</font><font color="#000000">"</font><font color="#000000">取消</font><font color="#000000">"</font><font color="#000000">,handler:reset}]<br />
&nbsp; });<br />
&nbsp; </font><font color="#0000ff">function</font><font color="#000000"> login(){<br />
&nbsp; &nbsp; &nbsp; &nbsp; form.form.submit();</font><font color="#008000">//</font><font color="#008000">提交</font><font color="#008000"><br />
</font><font color="#000000">&nbsp; }<br />
&nbsp; </font><font color="#0000ff">function</font><font color="#000000"> reset(){<br />
&nbsp; &nbsp; &nbsp; &nbsp; form.form.reset();</font><font color="#008000">//</font><font color="#008000">取消</font><font color="#008000"><br />
</font><font color="#000000">&nbsp; }<br />
</font><font color="#000000">3</font><font color="#000000">.如果你想绑定验证，在form表单添加参数monitorValid:</font><font color="#0000ff">true</font><font color="#000000">,然后在按钮配置参数中添加formBind：</font><font color="#0000ff">true</font><font color="#000000">，如<br />
&nbsp; &nbsp; &nbsp; buttons:[{text:</font><font color="#000000">"</font><font color="#000000">确定</font><font color="#000000">"</font><font color="#000000">,handler:login,formBind:</font><font color="#0000ff">true</font><font color="#000000">},{text:</font><font color="#000000">"</font><font color="#000000">取消</font><font color="#000000">"</font><font color="#000000">,handler:reset}]<br />
则只有所有的填写字段都满足条件时，</font><font color="#000000">"</font><font color="#000000">确定</font><font color="#000000">"</font><font color="#000000">方可提交！如下图，</font><br />
<br />
<img src="http://images.cnblogs.com/cnblogs_com/qianxudetianxia/2008-08-05_225825.gif" onload="attachimg(this, 'load');" border="0"  alt="" /><br />
好了，一个简单的formpanel的提交的原理弄清楚啦！<br />
有关form提交数据的方法有多种，大家可以参考<a href="http://www.17ext.com/showtopic-55.aspx" target="_blank"><font color="#800080">http://www.17ext.com/showtopic-55.aspx</font></a>（三种ext提交数据的方式），<br />
<font color="#000000">以后有机会我们再讨论！<br />
下面我们来做个复杂点（只是样子）的form，示例一下（还是上面的原理）！<br />
效果图：<br />
<img height="562" src="http://images.cnblogs.com/cnblogs_com/qianxudetianxia/2008-08-06_235223.gif" width="514" onload="attachimg(this, 'load');" border="0" &nbsp;  alt="" /><br />
</font><font color="#000000">传到GetForm.aspx页面后显示：<br />
</font><img style="cursor: pointer" onclick="zoom(this)" height="331" src="http://images.cnblogs.com/cnblogs_com/qianxudetianxia/2008-08-06_235523.gif" width="576" onload="attachimg(this, 'load');" border="0" &nbsp; resized="true"  alt="" /><br />
<font color="#000000"><font color="#000000"><font color="#000000">不过在传过来的页面要记得ValidateRequest="false"，安全编码我就暂且不讨论了！<br />
js代码：<br />
</font><br />
<font color="#000000">Ext.onReady(</font><font color="#0000ff">function</font><font color="#000000">(){<br />
&nbsp; Ext.QuickTips.init();<br />
&nbsp; </font><font color="#0000ff">var</font><font color="#000000"> form</font><font color="#000000">=</font><font color="#0000ff">new</font><font color="#000000"> Ext.FormPanel({<br />
&nbsp; &nbsp; frame:</font><font color="#0000ff">true</font><font color="#000000">,<br />
&nbsp; &nbsp; width:</font><font color="#000000">500</font><font color="#000000">,<br />
&nbsp; &nbsp; monitorValid:</font><font color="#0000ff">true</font><font color="#000000">,</font><font color="#008000">//</font><font color="#008000">把有formBind:true的按钮和验证绑定</font><font color="#008000"><br />
</font><font color="#000000">&nbsp; &nbsp; layout:</font><font color="#000000">"</font><font color="#000000">form</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; labelWidth:</font><font color="#000000">55</font><font color="#000000">,<br />
&nbsp; &nbsp; title:</font><font color="#000000">"</font><font color="#000000">添加个人信息</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; labelAlign:</font><font color="#000000">"</font><font color="#000000">right</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; renderTo:Ext.getBody(),<br />
&nbsp; &nbsp; submit: </font><font color="#0000ff">function</font><font color="#000000">(){<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </font><font color="#0000ff">this</font><font color="#000000">.getEl().dom.action </font><font color="#000000">=</font><br />
<font color="#000000">'</font><font color="#000000">GetForm.aspx</font><font color="#000000">'</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </font><font color="#0000ff">this</font><font color="#000000">.getEl().dom.method</font><font color="#000000">=</font><font color="#000000">'</font><font color="#000000">POST</font><font color="#000000">'</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </font><font color="#0000ff">this</font><font color="#000000">.getEl().dom.submit();<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },<br />
&nbsp; &nbsp; items:[{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xtype:</font><font color="#000000">"</font><font color="#000000">panel</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; layout:</font><font color="#000000">"</font><font color="#000000">column</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fieldLabel:</font><font color="#000000">"</font><font color="#000000">用户名</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isFormField:</font><font color="#0000ff">true</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; items:[{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; columnWidth:.</font><font color="#000000">5</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xtype:</font><font color="#000000">"</font><font color="#000000">textfield</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; allowBlank:</font><font color="#0000ff">false</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; blankText:</font><font color="#000000">"</font><font color="#000000">不能为空，请填写</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name:</font><font color="#000000">"</font><font color="#000000">UserName</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; anchor:</font><font color="#000000">"</font><font color="#000000">90%</font><font color="#000000">"</font><font color="#000000"><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; columnWidth:.</font><font color="#000000">20</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; layout:</font><font color="#000000">"</font><font color="#000000">form</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; labelWidth:</font><font color="#000000">40</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; labelAlign:</font><font color="#000000">"</font><font color="#000000">right</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; items:[{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xtype:</font><font color="#000000">"</font><font color="#000000">radio</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fieldLabel:</font><font color="#000000">"</font><font color="#000000">性别</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; boxLabel:</font><font color="#000000">"</font><font color="#000000">男</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name:</font><font color="#000000">"</font><font color="#000000">Sex</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; checked:</font><font color="#0000ff">true</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; inputValue:</font><font color="#000000">"</font><font color="#000000">man</font><font color="#000000">"</font><font color="#000000">,</font><font color="#008000">//</font><font color="#008000">这里如果用value，值是on，所以用inputValue（出现这种情况的是radio,checkbox）</font><font color="#008000"><br />
</font><font color="#000000">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; anchor:</font><font color="#000000">"</font><font color="#000000">95%</font><font color="#000000">"</font><font color="#000000"><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }]<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; columnWidth:.</font><font color="#000000">30</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; layout:</font><font color="#000000">"</font><font color="#000000">form</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; labelWidth:</font><font color="#000000">1</font><font color="#000000">,</font><font color="#008000">//</font><font color="#008000">让标签宽度为很小的值（奇怪的是为0时反而不行）</font><font color="#008000"><br />
</font><font color="#000000">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; items:[{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xtype:</font><font color="#000000">"</font><font color="#000000">radio</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; boxLabel:</font><font color="#000000">"</font><font color="#000000">女</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; labelSeparator:</font><font color="#000000">""</font><font color="#000000">,</font><font color="#008000">//</font><font color="#008000">去除分隔符&#8220;：&#8221;</font><font color="#008000"><br />
</font><font color="#000000">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name:</font><font color="#000000">"</font><font color="#000000">Sex</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; inputValue:</font><font color="#000000">"</font><font color="#000000">woman</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; anchor:</font><font color="#000000">"</font><font color="#000000">95%</font><font color="#000000">"</font><font color="#000000"><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }]<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }]<br />
&nbsp; &nbsp; },{</font><font color="#008000">//</font><font color="#008000">上面是第一行</font><font color="#008000"><br />
</font><font color="#000000">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xtype:</font><font color="#000000">"</font><font color="#000000">panel</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; layout:</font><font color="#000000">"</font><font color="#000000">column</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fieldLabel:</font><font color="#000000">"</font><font color="#000000">出生日期</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isFormField:</font><font color="#0000ff">true</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; items:[{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; columnWidth:.</font><font color="#000000">5</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xtype:</font><font color="#000000">"</font><font color="#000000">datefield</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name:</font><font color="#000000">"</font><font color="#000000">BirthDate</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; anchor:</font><font color="#000000">"</font><font color="#000000">90%</font><font color="#000000">"</font><font color="#000000"><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; columnWidth:.</font><font color="#000000">5</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; layout:</font><font color="#000000">"</font><font color="#000000">form</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; labelWidth:</font><font color="#000000">40</font><font color="#000000">,</font><font color="#008000">//</font><font color="#008000">注意，这个参数在这里可以调整简单fieldLabel的布局位置</font><font color="#008000"><br />
</font><font color="#000000">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; items:[{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xtype:</font><font color="#000000">"</font><font color="#000000">combo</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name:</font><font color="#000000">"</font><font color="#000000">Degree</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fieldLabel:</font><font color="#000000">"</font><font color="#000000">学位</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; store:[</font><font color="#000000">"</font><font color="#000000">小学</font><font color="#000000">"</font><font color="#000000">,</font><font color="#000000">"</font><font color="#000000">初中</font><font color="#000000">"</font><font color="#000000">,</font><font color="#000000">"</font><font color="#000000">高中</font><font color="#000000">"</font><font color="#000000">,</font><font color="#000000">"</font><font color="#000000">专科</font><font color="#000000">"</font><font color="#000000">,</font><font color="#000000">"</font><font color="#000000">本科</font><font color="#000000">"</font><font color="#000000">,</font><font color="#000000">"</font><font color="#000000">硕士</font><font color="#000000">"</font><font color="#000000">,</font><font color="#000000">"</font><font color="#000000">博士</font><font color="#000000">"</font><font color="#000000">],<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; emptyText:</font><font color="#000000">"</font><font color="#000000">请选择适合你的学历<img src="http://www.cnblogs.com/Images/dot.gif" onload="attachimg(this, 'load');" border="0"  alt="" /></font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; anchor:</font><font color="#000000">"</font><font color="#000000">90%</font><font color="#000000">"</font><font color="#000000"><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }]<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }]<br />
&nbsp; &nbsp; },{</font><font color="#008000">//</font><font color="#008000">上面是第二行</font><font color="#008000"><br />
</font><font color="#000000">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xtype:</font><font color="#000000">"</font><font color="#000000">panel</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; layout:</font><font color="#000000">"</font><font color="#000000">column</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isFormField:</font><font color="#0000ff">true</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fieldLabel:</font><font color="#000000">"</font><font color="#000000">使用框架</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; items:[{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; columnWidth:.</font><font color="#000000">2</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xtype:</font><font color="#000000">"</font><font color="#000000">checkbox</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; boxLabel:</font><font color="#000000">"</font><font color="#000000">Spring.net</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name:</font><font color="#000000">"</font><font color="#000000">SpringNet</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; inputValue:</font><font color="#000000">"</font><font color="#000000">spring</font><font color="#000000">"</font><font color="#008000">//</font><font color="#008000">这里如果用value，值是on，所以用inputValue</font><font color="#008000"><br />
</font><font color="#000000">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; columnWidth:.</font><font color="#000000">2</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; layout:</font><font color="#000000">"</font><font color="#000000">form</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; labelWidth:</font><font color="#000000">1</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; items:[{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xtype:</font><font color="#000000">"</font><font color="#000000">checkbox</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; boxLabel:</font><font color="#000000">"</font><font color="#000000">Nhibernate</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; labelSeparator:</font><font color="#000000">""</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name:</font><font color="#000000">"</font><font color="#000000">NHibernate</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; inputValue:</font><font color="#000000">"</font><font color="#000000">nhibernate</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; anchor:</font><font color="#000000">"</font><font color="#000000">95%</font><font color="#000000">"</font><font color="#000000"><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }]<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; columnWidth:.</font><font color="#000000">6</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; layout:</font><font color="#000000">"</font><font color="#000000">form</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; labelWidth:</font><font color="#000000">1</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; items:[{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xtype:</font><font color="#000000">"</font><font color="#000000">checkbox</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; boxLabel:</font><font color="#000000">"</font><font color="#000000">Linq</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; labelSeparator:</font><font color="#000000">""</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name:</font><font color="#000000">"</font><font color="#000000">Linq</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; inputValue:</font><font color="#000000">"</font><font color="#000000">linq</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; anchor:</font><font color="#000000">"</font><font color="#000000">95%</font><font color="#000000">"</font><font color="#000000"><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }]<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }]<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; },{</font><font color="#008000">//</font><font color="#008000">上面是第三行</font><font color="#008000"><br />
</font><font color="#000000">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xtype:</font><font color="#000000">"</font><font color="#000000">textfield</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fieldLabel:</font><font color="#000000">"</font><font color="#000000">Email</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name:</font><font color="#000000">"</font><font color="#000000">Email</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; vtype:</font><font color="#000000">"</font><font color="#000000">email</font><font color="#000000">"</font><font color="#000000">,</font><font color="#008000">//</font><font color="#008000">email验证,如果想自定义验证的话，请参见前面的文章</font><font color="#008000"><br />
</font><font color="#000000">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; vtypeText:</font><font color="#000000">"</font><font color="#000000">email格式错误！</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; anchor:</font><font color="#000000">"</font><font color="#000000">56%</font><font color="#000000">"</font><font color="#008000">//</font><font color="#008000">控制文本框的长度</font><font color="#008000"><br />
</font><font color="#000000">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; },{</font><font color="#008000">//</font><font color="#008000">上面是第四行</font><font color="#008000"><br />
</font><font color="#000000">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xtype:</font><font color="#000000">"</font><font color="#000000">textarea</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fieldLabel:</font><font color="#000000">"</font><font color="#000000">个性签名</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name:</font><font color="#000000">"</font><font color="#000000">OneWord</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; height:</font><font color="#000000">50</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; anchor:</font><font color="#000000">"</font><font color="#000000">95%</font><font color="#000000">"</font><font color="#000000"><br />
&nbsp; &nbsp; },{</font><font color="#008000">//</font><font color="#008000">上面是第五行</font><font color="#008000"><br />
</font><font color="#000000">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xtype:</font><font color="#000000">"</font><font color="#000000">htmleditor</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fieldLabel:</font><font color="#000000">"</font><font color="#000000">想说的话</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name:</font><font color="#000000">"</font><font color="#000000">WantToSay</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; anchor:</font><font color="#000000">"</font><font color="#000000">95%</font><font color="#000000">"</font><font color="#000000">,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; enableAlignments:</font><font color="#0000ff">false</font><font color="#000000">,</font><font color="#008000">//</font><font color="#008000">去除左右对齐工具栏</font><font color="#008000"><br />
</font><font color="#000000">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; enableLists:</font><font color="#0000ff">false</font><font color="#008000">//</font><font color="#008000">去除列表工具栏</font><font color="#008000"><br />
</font><font color="#000000">&nbsp; &nbsp; }],<br />
&nbsp; &nbsp; &nbsp; buttons:[{text:</font><font color="#000000">"</font><font color="#000000">确定</font><font color="#000000">"</font><font color="#000000">,handler:login,formBind:</font><font color="#0000ff">true</font><font color="#000000">},{text:</font><font color="#000000">"</font><font color="#000000">取消</font><font color="#000000">"</font><font color="#000000">,handler:reset}]<br />
&nbsp; });<br />
&nbsp; </font><font color="#0000ff">function</font><font color="#000000"> login(){<br />
&nbsp; &nbsp; &nbsp; &nbsp; form.form.submit();<br />
&nbsp; }<br />
&nbsp; </font><font color="#0000ff">function</font><font color="#000000"> reset(){<br />
&nbsp; &nbsp; &nbsp; &nbsp; form.form.reset();<br />
&nbsp; }<br />
});</font><br />
</font></font></font></font>
<img src ="http://www.blogjava.net/fuhoujun/aggbug/232879.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fuhoujun/" target="_blank">付厚俊</a> 2008-10-07 11:51 <a href="http://www.blogjava.net/fuhoujun/archive/2008/10/07/232879.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ext2 常见界面界面(grid分页、窗口布局、下拉框级联) </title><link>http://www.blogjava.net/fuhoujun/archive/2008/10/05/232437.html</link><dc:creator>付厚俊</dc:creator><author>付厚俊</author><pubDate>Sat, 04 Oct 2008 19:00:00 GMT</pubDate><guid>http://www.blogjava.net/fuhoujun/archive/2008/10/05/232437.html</guid><wfw:comment>http://www.blogjava.net/fuhoujun/comments/232437.html</wfw:comment><comments>http://www.blogjava.net/fuhoujun/archive/2008/10/05/232437.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fuhoujun/comments/commentRss/232437.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fuhoujun/services/trackbacks/232437.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 先上图grid分页：&nbsp;&nbsp;&nbsp;&nbsp; 把grid和page工具绑定在一起&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;create&nbsp;the&nbsp;Data&nbsp;Store&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;store&nbsp;=&nbsp;new&nbsp;Ext.data...&nbsp;&nbsp;<a href='http://www.blogjava.net/fuhoujun/archive/2008/10/05/232437.html'>阅读全文</a><img src ="http://www.blogjava.net/fuhoujun/aggbug/232437.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fuhoujun/" target="_blank">付厚俊</a> 2008-10-05 03:00 <a href="http://www.blogjava.net/fuhoujun/archive/2008/10/05/232437.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>带复选框(checkbox)的树</title><link>http://www.blogjava.net/fuhoujun/archive/2008/10/04/232378.html</link><dc:creator>付厚俊</dc:creator><author>付厚俊</author><pubDate>Sat, 04 Oct 2008 12:22:00 GMT</pubDate><guid>http://www.blogjava.net/fuhoujun/archive/2008/10/04/232378.html</guid><wfw:comment>http://www.blogjava.net/fuhoujun/comments/232378.html</wfw:comment><comments>http://www.blogjava.net/fuhoujun/archive/2008/10/04/232378.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fuhoujun/comments/commentRss/232378.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fuhoujun/services/trackbacks/232378.html</trackback:ping><description><![CDATA[<p><a class="bb-url" href="http://extjs.org.cn/index.php?q=node/81">官方实例</a>中有介绍如何将json数据变成一棵树的<a class="bb-url" href="http://extjs.org.cn/index.php?q=node/153">简单例子</a>。<br />
该例子可以满足我们的一般需求。很多时候我们需要用到带checkbox的树。<br />
其实加个checkbox框先简单，只需要在返回来的json数据中加上 checked 项（为true/false）。要实现我们想要的选中父节点的checkbox后，自动选中子节点也很简单，只需要加上下面这一段代码就可以了。<br />
</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.extjs.org.cn/index.php?q=node/223#">view plain</a><a href="http://www.extjs.org.cn/index.php?q=node/223#">copy to clipboard</a><a href="http://www.extjs.org.cn/index.php?q=node/223#">print</a><a href="http://www.extjs.org.cn/index.php?q=node/223#">?</a></div>
</div>
<ol class="dp-c">
    <li class="alt"><span><span>tree.on(</span><span class="string">'checkchange'</span><span>,&nbsp;</span><span class="keyword">function</span><span>(node,&nbsp;checked)&nbsp;{&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node.expand();&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node.attributes.checked&nbsp;=&nbsp;checked;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node.eachChild(</span><span class="keyword">function</span><span>(child)&nbsp;{&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;child.ui.toggleCheck(checked);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;child.attributes.checked&nbsp;=&nbsp;checked;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;child.fireEvent(</span><span class="string">'checkchange'</span><span>,&nbsp;child,&nbsp;checked);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;tree);&nbsp;&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="bb-code-block" style="display: none" name="code">tree.on('checkchange', function(node, checked) {
node.expand();
node.attributes.checked = checked;
node.eachChild(function(child) {
child.ui.toggleCheck(checked);
child.attributes.checked = checked;
child.fireEvent('checkchange', child, checked);
});
}, tree);
</pre>
<p>&nbsp;</p>
<p><span style="font-weight: bold">演示(demo)地址在文章最后.</span></p>
<p><span style="font-weight: bold">效果图如下:</span><br />
<img class="bb-image" alt="" src="http://extjs.org.cn/screen_capture/mydemo/0005_checkbox_reorder.jpg" /></p>
<p>源代码包括 0005_checkbox_reorder.html,0005_checkbox_reorder_tree.php.</p>
<p><span style="font-weight: bold">0005_checkbox_reorder.html</span><br />
</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.extjs.org.cn/index.php?q=node/223#">view plain</a><a href="http://www.extjs.org.cn/index.php?q=node/223#">copy to clipboard</a><a href="http://www.extjs.org.cn/index.php?q=node/223#">print</a><a href="http://www.extjs.org.cn/index.php?q=node/223#">?</a></div>
</div>
<ol class="dp-c">
    <li class="alt"><span><span>&lt;html&gt; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&lt;head&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&lt;meta&nbsp;http-equiv=</span><span class="string">"Content-Type"</span><span>&nbsp;content=</span><span class="string">"text/html;&nbsp;charset=utf-8"</span><span>&gt; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&lt;title&gt;带复选框(checkbox)的树&lt;/title&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&lt;link&nbsp;rel=</span><span class="string">"stylesheet"</span><span>&nbsp;type=</span><span class="string">"text/css"</span><span>&nbsp;href=</span><span class="string">"../../resources/css/ext-all.css"</span><span>&nbsp;/&gt; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&lt;script&nbsp;type=</span><span class="string">"text/javascript"</span><span>&nbsp;src=</span><span class="string">"../../adapter/ext/ext-base.js"</span><span>&gt;&lt;/script&gt; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&lt;script&nbsp;type=</span><span class="string">"text/javascript"</span><span>&nbsp;src=</span><span class="string">"../../ext-all.js"</span><span>&gt;&lt;/script&gt; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&lt;link&nbsp;rel=</span><span class="string">"stylesheet"</span><span>&nbsp;type=</span><span class="string">"text/css"</span><span>&nbsp;href=</span><span class="string">"../../examples/examples.css"</span><span>&nbsp;/&gt; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&lt;script&nbsp;type=</span><span class="string">"text/javascript"</span><span>&nbsp;src=</span><span class="string">"../../examples.js"</span><span>&gt;&lt;/script&gt; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&lt;script&nbsp;type=</span><span class="string">"text/javascript"</span><span>&gt; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>Ext.onReady(</span><span class="keyword">function</span><span>(){ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;Ext.BLANK_IMAGE_URL&nbsp;=&nbsp;</span><span class="string">"../../resources/images/default/s.gif"</span><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;shorthand </span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;Tree&nbsp;=&nbsp;Ext.tree; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;tree&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Tree.TreePanel({ &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;el:</span><span class="string">'tree-div'</span><span>, &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;useArrows:</span><span class="keyword">true</span><span>, &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;autoScroll:</span><span class="keyword">true</span><span>, &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;animate:</span><span class="keyword">true</span><span>, &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enableDD:</span><span class="keyword">true</span><span>, &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;containerScroll:&nbsp;</span><span class="keyword">true</span><span>,&nbsp; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loader:&nbsp;</span><span class="keyword">new</span><span>&nbsp;Tree.TreeLoader({ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataUrl:</span><span class="string">'0005_checkbox_reorder_tree.php'</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;tree.on(</span><span class="string">'checkchange'</span><span>,&nbsp;</span><span class="keyword">function</span><span>(node,&nbsp;checked)&nbsp;{&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node.expand();&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node.attributes.checked&nbsp;=&nbsp;checked;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node.eachChild(</span><span class="keyword">function</span><span>(child)&nbsp;{&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;child.ui.toggleCheck(checked);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;child.attributes.checked&nbsp;=&nbsp;checked;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;child.fireEvent(</span><span class="string">'checkchange'</span><span>,&nbsp;child,&nbsp;checked);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;tree);&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;set&nbsp;the&nbsp;root&nbsp;node </span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;root&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Tree.AsyncTreeNode({ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text:&nbsp;</span><span class="string">'Ext&nbsp;JS'</span><span>, &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;draggable:</span><span class="keyword">false</span><span>, &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id:</span><span class="string">'source'</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;tree.setRootNode(root); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;render&nbsp;the&nbsp;tree </span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;tree.render(); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;root.expand(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>}); &nbsp;&nbsp;</span></li>
    <li class=""><span>&lt;/script&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&lt;/head&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&lt;body&gt; &nbsp;&nbsp;</span></li>
    <li class=""><span>&lt;h1&gt;带复选框(checkbox)的树&lt;/h1&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&lt;p&gt;&lt;/p&gt; &nbsp;&nbsp;</span></li>
    <li class=""><span>&lt;p&gt;改编自ExtJs&nbsp;自带的tree例子，选中父节点后，所有子节点会自动选上。&lt;/p&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&lt;p&gt;该例子点击父节点如果速度过快，有时候不会自动选中子节点！&nbsp;&lt;/p&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&lt;div&nbsp;id=</span><span class="string">"tree-div"</span><span>&nbsp;style=</span><span class="string">"overflow:auto;&nbsp;height:300px;width:250px;border:1px&nbsp;solid&nbsp;#c3daf9;"</span><span>&gt;&lt;/div&gt; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&lt;/body&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&lt;/html&gt;&nbsp;&nbsp;</span></li>
</ol>
</div>
<img src ="http://www.blogjava.net/fuhoujun/aggbug/232378.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fuhoujun/" target="_blank">付厚俊</a> 2008-10-04 20:22 <a href="http://www.blogjava.net/fuhoujun/archive/2008/10/04/232378.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EXT2.0 checkbox树的扩展(支持单选,级联多选,只选叶子等)</title><link>http://www.blogjava.net/fuhoujun/archive/2008/10/04/232363.html</link><dc:creator>付厚俊</dc:creator><author>付厚俊</author><pubDate>Sat, 04 Oct 2008 11:32:00 GMT</pubDate><guid>http://www.blogjava.net/fuhoujun/archive/2008/10/04/232363.html</guid><wfw:comment>http://www.blogjava.net/fuhoujun/comments/232363.html</wfw:comment><comments>http://www.blogjava.net/fuhoujun/archive/2008/10/04/232363.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fuhoujun/comments/commentRss/232363.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fuhoujun/services/trackbacks/232363.html</trackback:ping><description><![CDATA[<p>在ext1.x里,树是没有checkbox的, 幸好在2.X版本里提供了这个功能, 在许多应用里, 带有checkbox的树使用还是很常见的</p>
<p>&nbsp;</p>
<p>Ext2.X提供了简单的checkbox实现,但对于一些复杂的需求,如: 级联多选(选中父结点,自选中其所有子结点和所有父结点) , 单选等等, Ext2.X并没有帮我们实现</p>
<p>&nbsp;</p>
<p>还有最难解决的情况, 当树是异步的时候, 要想级联多选, 实现起来有些难度</p>
<p>&nbsp;</p>
<p>在此, 通过对Ext.tree.TreeNodeUI进行扩展,这些问题都得到很好的解决</p>
<p>&nbsp;</p>
<div>
<div>
<div>Js代码 <a title="复制代码" href="file:///C:Documents%20and%20SettingsAdministrator桌面extjs知识EXT2_0%20checkbox树的扩展(支持单选,级联多选,只选叶子等)%20-%20EXT%20-%20AJAX%20-%20JavaEye论坛.mht%23"  false;? CopyToClipboard?,this);return><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol>
    <li><span><span><font color="#008200">/** </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp;@class&nbsp;Ext.tree.TreeCheckNodeUI </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp;@extends&nbsp;Ext.tree.TreeNodeUI </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp; </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp;对&nbsp;Ext.tree.TreeNodeUI&nbsp;进行checkbox功能的扩展,后台返回的结点信息不用非要包含checked属性 </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp; </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp;扩展的功能点有： </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp;一、支持只对树的叶子进行选择 </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;只有当返回的树结点属性leaf&nbsp;=&nbsp;true&nbsp;时，结点才有checkbox可选 </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;使用时，只需在声明树时，加上属性&nbsp;onlyLeafCheckable:&nbsp;true&nbsp;既可，默认是false </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp; </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp;二、支持对树的单选 </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;只允许选择一个结点 </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;使用时，只需在声明树时，加上属性&nbsp;checkModel:&nbsp;"single"&nbsp;既可 </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp; </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp;二、支持对树的级联多选&nbsp; </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;当选择结点时，自动选择该结点下的所有子结点，以及该结点的所有父结点（根结点除外），特别是支持异步，当子结点还没显示时，会从后台取得子结点，然后将其选中/取消选中 </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;使用时，只需在声明树时，加上属性&nbsp;checkModel:&nbsp;"cascade"&nbsp;既可 </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp; </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp;三、添加"check"事件 </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;该事件会在树结点的checkbox发生改变时触发 </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;使用时，只需给树注册事件,如： </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;tree.on("check",function(node,checked){...}); </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp; </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp;默认情况下，checkModel为'multiple'，也就是多选，onlyLeafCheckable为false，所有结点都可选 </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp; </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp;使用方法：在loader里加上&nbsp;baseAttrs:{uiProvider:Ext.tree.TreeCheckNodeUI}&nbsp;既可. </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp;例如： </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp;&nbsp;&nbsp;var&nbsp;tree&nbsp;=&nbsp;new&nbsp;Ext.tree.TreePanel({ </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;el:'tree-ct', </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width:568, </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;height:300, </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;checkModel:&nbsp;'cascade',&nbsp;&nbsp;&nbsp;//对树的级联多选 </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onlyLeafCheckable:&nbsp;false,//对树所有结点都可选 </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;animate:&nbsp;false, </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rootVisible:&nbsp;false, </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;autoScroll:true, </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loader:&nbsp;new&nbsp;Ext.tree.DWRTreeLoader({ </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwrCall:Tmplt.getTmpltTree, </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;baseAttrs:&nbsp;{&nbsp;uiProvider:&nbsp;Ext.tree.TreeCheckNodeUI&nbsp;}&nbsp;//添加&nbsp;uiProvider&nbsp;属性 </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}), </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root:&nbsp;new&nbsp;Ext.tree.AsyncTreeNode({&nbsp;id:'0'&nbsp;}) </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp;&nbsp;}); </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp;&nbsp;tree.on("check",function(node,checked){alert(node.text+"&nbsp;=&nbsp;"+checked)});&nbsp;//注册"check"事件 </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp;&nbsp;tree.render(); </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*&nbsp; </font></span>&nbsp;</span>
    <li><span><span><font color="#008200">&nbsp;*/</font></span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>Ext.tree.TreeCheckNodeUI&nbsp;=&nbsp;</span><span><strong><font color="#7f0055">function</font></strong></span><span>()&nbsp;{ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span><font color="#008200">//'multiple':多选;&nbsp;'single':单选;&nbsp;'cascade':级联多选 </font></span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">this</font></strong></span><span>.checkModel&nbsp;=&nbsp;</span><span><font color="#0000ff">'multiple'</font></span><span>; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span><font color="#008200">//only&nbsp;leaf&nbsp;can&nbsp;checked </font></span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">this</font></strong></span><span>.onlyLeafCheckable&nbsp;=&nbsp;</span><span><strong><font color="#7f0055">false</font></strong></span><span>; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;Ext.tree.TreeCheckNodeUI.superclass.constructor.apply(</span><span><strong><font color="#7f0055">this</font></strong></span><span>,&nbsp;arguments); &nbsp;&nbsp;</span></span>
    <li><span>}; &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>Ext.extend(Ext.tree.TreeCheckNodeUI,&nbsp;Ext.tree.TreeNodeUI,&nbsp;{ &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;renderElements&nbsp;:&nbsp;</span><span><strong><font color="#7f0055">function</font></strong></span><span>(n,&nbsp;a,&nbsp;targetNode,&nbsp;bulkRender){ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">var</font></strong></span><span>&nbsp;tree&nbsp;=&nbsp;n.getOwnerTree(); &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">this</font></strong></span><span>.checkModel&nbsp;=&nbsp;tree.checkModel&nbsp;||&nbsp;</span><span><strong><font color="#7f0055">this</font></strong></span><span>.checkModel; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">this</font></strong></span><span>.onlyLeafCheckable&nbsp;=&nbsp;tree.onlyLeafCheckable&nbsp;||&nbsp;</span><span><strong><font color="#7f0055">false</font></strong></span><span>; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><font color="#008200">//&nbsp;add&nbsp;some&nbsp;indent&nbsp;caching,&nbsp;this&nbsp;helps&nbsp;performance&nbsp;when&nbsp;rendering&nbsp;a&nbsp;large&nbsp;tree </font></span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">this</font></strong></span><span>.indentMarkup&nbsp;=&nbsp;n.parentNode&nbsp;?&nbsp;n.parentNode.ui.getChildIndent()&nbsp;:&nbsp;</span><span><font color="#0000ff">''</font></span><span>; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">var</font></strong></span><span>&nbsp;cb&nbsp;=&nbsp;(!</span><span><strong><font color="#7f0055">this</font></strong></span><span>.onlyLeafCheckable&nbsp;||&nbsp;a.leaf); &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">var</font></strong></span><span>&nbsp;href&nbsp;=&nbsp;a.href&nbsp;?&nbsp;a.href&nbsp;:&nbsp;Ext.isGecko&nbsp;?&nbsp;</span><span><font color="#0000ff">""</font></span><span>&nbsp;:&nbsp;</span><span><font color="#0000ff">"#"</font></span><span>; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">var</font></strong></span><span>&nbsp;buf&nbsp;=&nbsp;[</span><span><font color="#0000ff">'&lt;li&nbsp;class="x-tree-node"&gt;&lt;div&nbsp;ext:tree-node-id="'</font></span><span>,n.id,</span><span><font color="#0000ff">'"&nbsp;class="x-tree-node-el&nbsp;x-tree-node-leaf&nbsp;x-unselectable&nbsp;'</font></span><span>,&nbsp;a.cls,</span><span><font color="#0000ff">'"&nbsp;unselectable="on"&gt;'</font></span><span>, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><font color="#0000ff">'&lt;span&nbsp;class="x-tree-node-indent"&gt;'</font></span><span>,</span><span><strong><font color="#7f0055">this</font></strong></span><span>.indentMarkup,</span><span><font color="#0000ff">"&lt;/span&gt;"</font></span><span>, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><font color="#0000ff">'&lt;img&nbsp;src="'</font></span><span>,&nbsp;</span><span><strong><font color="#7f0055">this</font></strong></span><span>.emptyIcon,&nbsp;</span><span><font color="#0000ff">'"&nbsp;class="x-tree-ec-icon&nbsp;x-tree-elbow"&nbsp;/&gt;'</font></span><span>, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><font color="#0000ff">'&lt;img&nbsp;src="'</font></span><span>,&nbsp;a.icon&nbsp;||&nbsp;</span><span><strong><font color="#7f0055">this</font></strong></span><span>.emptyIcon,&nbsp;</span><span><font color="#0000ff">'"&nbsp;class="x-tree-node-icon'</font></span><span>,(a.icon&nbsp;?&nbsp;"&nbsp;x-tree-node-inline-icon</span><font color="#0000ff"><span>"&nbsp;:&nbsp;"</span><span>"),(a.iconCls&nbsp;?&nbsp;"</span></font><span>&nbsp;</span><font color="#0000ff"><span>"+a.iconCls&nbsp;:&nbsp;"</span><span>"),'"</span></font><span>&nbsp;unselectable=</span><span><font color="#0000ff">"on"</font></span><span>&nbsp;/&gt;', &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cb&nbsp;?&nbsp;(</span><span><font color="#0000ff">'&lt;input&nbsp;class="x-tree-node-cb"&nbsp;type="checkbox"&nbsp;'</font></span><span>&nbsp;+&nbsp;(a.checked&nbsp;?&nbsp;</span><span><font color="#0000ff">'checked="checked"&nbsp;/&gt;'</font></span><span>&nbsp;:&nbsp;</span><span><font color="#0000ff">'/&gt;'</font></span><span>))&nbsp;:&nbsp;</span><span><font color="#0000ff">''</font></span><span>, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><font color="#0000ff">'&lt;a&nbsp;hidefocus="on"&nbsp;class="x-tree-node-anchor"&nbsp;href="'</font></span><span>,href,</span><span><font color="#0000ff">'"&nbsp;tabIndex="1"&nbsp;'</font></span><span>, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a.hrefTarget&nbsp;?&nbsp;</span><span><font color="#0000ff">'&nbsp;target="'</font></span><span>+a.hrefTarget+</span><span><font color="#0000ff">'"'</font></span><span>&nbsp;:&nbsp;</span><span><font color="#0000ff">""</font></span><span>,&nbsp;</span><span><font color="#0000ff">'&gt;&lt;span&nbsp;unselectable="on"&gt;'</font></span><span>,n.text,</span><span><font color="#0000ff">"&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;"</font></span><span>, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><font color="#0000ff">'&lt;ul&nbsp;class="x-tree-node-ct"&nbsp;style="display:none;"&gt;&lt;/ul&gt;'</font></span><span>, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><font color="#0000ff">"&lt;/li&gt;"</font></span><span>].join(</span><span><font color="#0000ff">''</font></span><span>); &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">var</font></strong></span><span>&nbsp;nel; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">if</font></strong></span><span>(bulkRender&nbsp;!==&nbsp;</span><span><strong><font color="#7f0055">true</font></strong></span><span>&nbsp;&amp;&amp;&nbsp;n.nextSibling&nbsp;&amp;&amp;&nbsp;(nel&nbsp;=&nbsp;n.nextSibling.ui.getEl())){ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">this</font></strong></span><span>.wrap&nbsp;=&nbsp;Ext.DomHelper.insertHtml(</span><span><font color="#0000ff">"beforeBegin"</font></span><span>,&nbsp;nel,&nbsp;buf); &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span><strong><font color="#7f0055">else</font></strong></span><span>{ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">this</font></strong></span><span>.wrap&nbsp;=&nbsp;Ext.DomHelper.insertHtml(</span><span><font color="#0000ff">"beforeEnd"</font></span><span>,&nbsp;targetNode,&nbsp;buf); &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">this</font></strong></span><span>.elNode&nbsp;=&nbsp;</span><span><strong><font color="#7f0055">this</font></strong></span><span>.wrap.childNodes[0]; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">this</font></strong></span><span>.ctNode&nbsp;=&nbsp;</span><span><strong><font color="#7f0055">this</font></strong></span><span>.wrap.childNodes[1]; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">var</font></strong></span><span>&nbsp;cs&nbsp;=&nbsp;</span><span><strong><font color="#7f0055">this</font></strong></span><span>.elNode.childNodes; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">this</font></strong></span><span>.indentNode&nbsp;=&nbsp;cs[0]; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">this</font></strong></span><span>.ecNode&nbsp;=&nbsp;cs[1]; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">this</font></strong></span><span>.iconNode&nbsp;=&nbsp;cs[2]; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">var</font></strong></span><span>&nbsp;index&nbsp;=&nbsp;3; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">if</font></strong></span><span>(cb){ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">this</font></strong></span><span>.checkbox&nbsp;=&nbsp;cs[3]; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.fly(</span><span><strong><font color="#7f0055">this</font></strong></span><span>.checkbox).on(</span><span><font color="#0000ff">'click'</font></span><span>,&nbsp;</span><span><strong><font color="#7f0055">this</font></strong></span><span>.check.createDelegate(</span><span><strong><font color="#7f0055">this</font></strong></span><span>,[</span><span><strong><font color="#7f0055">null</font></strong></span><span>])); &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index++; &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">this</font></strong></span><span>.anchor&nbsp;=&nbsp;cs[index]; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">this</font></strong></span><span>.textNode&nbsp;=&nbsp;cs[index].firstChild; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}, &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span><font color="#008200">//&nbsp;private </font></span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;check&nbsp;:&nbsp;</span><span><strong><font color="#7f0055">function</font></strong></span><span>(checked){ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">var</font></strong></span><span>&nbsp;n&nbsp;=&nbsp;</span><span><strong><font color="#7f0055">this</font></strong></span><span>.node; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">var</font></strong></span><span>&nbsp;tree&nbsp;=&nbsp;n.getOwnerTree(); &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">this</font></strong></span><span>.checkModel&nbsp;=&nbsp;tree.checkModel&nbsp;||&nbsp;</span><span><strong><font color="#7f0055">this</font></strong></span><span>.checkModel; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">if</font></strong></span><span>(&nbsp;checked&nbsp;===&nbsp;</span><span><strong><font color="#7f0055">null</font></strong></span><span>&nbsp;)&nbsp;{ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;checked&nbsp;=&nbsp;</span><span><strong><font color="#7f0055">this</font></strong></span><span>.checkbox.checked; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span><strong><font color="#7f0055">else</font></strong></span><span>&nbsp;{ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">this</font></strong></span><span>.checkbox.checked&nbsp;=&nbsp;checked; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n.attributes.checked&nbsp;=&nbsp;checked; &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree.fireEvent(</span><span><font color="#0000ff">'check'</font></span><span>,&nbsp;n,&nbsp;checked); &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">if</font></strong></span><span>(!</span><span><strong><font color="#7f0055">this</font></strong></span><span>.onlyLeafCheckable&nbsp;&amp;&amp;&nbsp;</span><span><strong><font color="#7f0055">this</font></strong></span><span>.checkModel&nbsp;==&nbsp;</span><span><font color="#0000ff">'cascade'</font></span><span>){ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">var</font></strong></span><span>&nbsp;parentNode&nbsp;=&nbsp;n.parentNode; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">if</font></strong></span><span>(parentNode&nbsp;!==&nbsp;</span><span><strong><font color="#7f0055">null</font></strong></span><span>)&nbsp;{ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">this</font></strong></span><span>.parentCheck(parentNode,checked); &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">if</font></strong></span><span>(&nbsp;!n.expanded&nbsp;&amp;&amp;&nbsp;!n.childrenRendered&nbsp;)&nbsp;{ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n.expand(</span><span><strong><font color="#7f0055">false</font></strong></span><span>,</span><span><strong><font color="#7f0055">false</font></strong></span><span>,</span><span><strong><font color="#7f0055">this</font></strong></span><span>.childCheck); &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">else</font></strong></span><span>&nbsp;{ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">this</font></strong></span><span>.childCheck(n); &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span><strong><font color="#7f0055">else</font></strong></span><span>&nbsp;</span><span><strong><font color="#7f0055">if</font></strong></span><span>(</span><span><strong><font color="#7f0055">this</font></strong></span><span>.checkModel&nbsp;==&nbsp;</span><span><font color="#0000ff">'single'</font></span><span>){ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">var</font></strong></span><span>&nbsp;checkedNodes&nbsp;=&nbsp;tree.getChecked(); &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">for</font></strong></span><span>(</span><span><strong><font color="#7f0055">var</font></strong></span><span>&nbsp;i=0;i&lt;checkedNodes.length;i++){ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">var</font></strong></span><span>&nbsp;node&nbsp;=&nbsp;checkedNodes[i]; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">if</font></strong></span><span>(node.id&nbsp;!=&nbsp;n.id){ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node.getUI().checkbox.checked&nbsp;=&nbsp;</span><span><strong><font color="#7f0055">false</font></strong></span><span>; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node.attributes.checked&nbsp;=&nbsp;</span><span><strong><font color="#7f0055">false</font></strong></span><span>; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree.fireEvent(</span><span><font color="#0000ff">'check'</font></span><span>,&nbsp;node,&nbsp;</span><span><strong><font color="#7f0055">false</font></strong></span><span>); &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}, &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span><font color="#008200">//&nbsp;private </font></span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;childCheck&nbsp;:&nbsp;</span><span><strong><font color="#7f0055">function</font></strong></span><span>(node){ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">var</font></strong></span><span>&nbsp;a&nbsp;=&nbsp;node.attributes; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">if</font></strong></span><span>(!a.leaf)&nbsp;{ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">var</font></strong></span><span>&nbsp;cs&nbsp;=&nbsp;node.childNodes; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">var</font></strong></span><span>&nbsp;csui; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">for</font></strong></span><span>(</span><span><strong><font color="#7f0055">var</font></strong></span><span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;cs.length;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;csui&nbsp;=&nbsp;cs[i].getUI(); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">if</font></strong></span><span>(csui.checkbox.checked&nbsp;^&nbsp;a.checked) &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;csui.check(a.checked); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}, &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span><font color="#008200">//&nbsp;private </font></span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;parentCheck&nbsp;:&nbsp;</span><span><strong><font color="#7f0055">function</font></strong></span><span>(node&nbsp;,checked){ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">var</font></strong></span><span>&nbsp;checkbox&nbsp;=&nbsp;node.getUI().checkbox; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">if</font></strong></span><span>(</span><span><strong><font color="#7f0055">typeof</font></strong></span><span>&nbsp;checkbox&nbsp;==&nbsp;</span><span><font color="#0000ff">'undefined'</font></span><span>)</span><span><strong><font color="#7f0055">return</font></strong></span><span>&nbsp;; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">if</font></strong></span><span>(!(checked&nbsp;^&nbsp;checkbox.checked))</span><span><strong><font color="#7f0055">return</font></strong></span><span>; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">if</font></strong></span><span>(!checked&nbsp;&amp;&amp;&nbsp;</span><span><strong><font color="#7f0055">this</font></strong></span><span>.childHasChecked(node))</span><span><strong><font color="#7f0055">return</font></strong></span><span>; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;checkbox.checked&nbsp;=&nbsp;checked; &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node.attributes.checked&nbsp;=&nbsp;checked; &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node.getOwnerTree().fireEvent(</span><span><font color="#0000ff">'check'</font></span><span>,&nbsp;node,&nbsp;checked); &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">var</font></strong></span><span>&nbsp;parentNode&nbsp;=&nbsp;node.parentNode; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">if</font></strong></span><span>(&nbsp;parentNode&nbsp;!==&nbsp;</span><span><strong><font color="#7f0055">null</font></strong></span><span>){ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">this</font></strong></span><span>.parentCheck(parentNode,checked); &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}, &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span><font color="#008200">//&nbsp;private </font></span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;childHasChecked&nbsp;:&nbsp;</span><span><strong><font color="#7f0055">function</font></strong></span><span>(node){ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">var</font></strong></span><span>&nbsp;childNodes&nbsp;=&nbsp;node.childNodes; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">if</font></strong></span><span>(childNodes&nbsp;||&nbsp;childNodes.length&gt;0){ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">for</font></strong></span><span>(</span><span><strong><font color="#7f0055">var</font></strong></span><span>&nbsp;i=0;i&lt;childNodes.length;i++){ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">if</font></strong></span><span>(childNodes[i].getUI().checkbox.checked) &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">return</font></strong></span><span>&nbsp;</span><span><strong><font color="#7f0055">true</font></strong></span><span>; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">return</font></strong></span><span>&nbsp;</span><span><strong><font color="#7f0055">false</font></strong></span><span>; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}, &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;toggleCheck&nbsp;:&nbsp;</span><span><strong><font color="#7f0055">function</font></strong></span><span>(value){ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">var</font></strong></span><span>&nbsp;cb&nbsp;=&nbsp;</span><span><strong><font color="#7f0055">this</font></strong></span><span>.checkbox; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">if</font></strong></span><span>(cb){ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">var</font></strong></span><span>&nbsp;checked&nbsp;=&nbsp;(value&nbsp;===&nbsp;undefined&nbsp;?&nbsp;!cb.checked&nbsp;:&nbsp;value); &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><strong><font color="#7f0055">this</font></strong></span><span>.check(checked); &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li><span>});&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre style="display: none">/**
* @class Ext.tree.TreeCheckNodeUI
* @extends Ext.tree.TreeNodeUI
*
* 对 Ext.tree.TreeNodeUI 进行checkbox功能的扩展,后台返回的结点信息不用非要包含checked属性
*
* 扩展的功能点有：
* 一、支持只对树的叶子进行选择
*    只有当返回的树结点属性leaf = true 时，结点才有checkbox可选
*    使用时，只需在声明树时，加上属性 onlyLeafCheckable: true 既可，默认是false
*
* 二、支持对树的单选
*    只允许选择一个结点
*    使用时，只需在声明树时，加上属性 checkModel: "single" 既可
*
* 二、支持对树的级联多选
*    当选择结点时，自动选择该结点下的所有子结点，以及该结点的所有父结点（根结点除外），特别是支持异步，当子结点还没显示时，会从后台取得子结点，然后将其选中/取消选中
*    使用时，只需在声明树时，加上属性 checkModel: "cascade" 既可
*
* 三、添加"check"事件
*    该事件会在树结点的checkbox发生改变时触发
*    使用时，只需给树注册事件,如：
*    tree.on("check",function(node,checked){...});
*
* 默认情况下，checkModel为'multiple'，也就是多选，onlyLeafCheckable为false，所有结点都可选
*
* 使用方法：在loader里加上 baseAttrs:{uiProvider:Ext.tree.TreeCheckNodeUI} 既可.
* 例如：
*   var tree = new Ext.tree.TreePanel({
*  el:'tree-ct',
*  width:568,
*  height:300,
*  checkModel: 'cascade',   //对树的级联多选
*  onlyLeafCheckable: false,//对树所有结点都可选
*  animate: false,
*  rootVisible: false,
*  autoScroll:true,
*  loader: new Ext.tree.DWRTreeLoader({
*   dwrCall:Tmplt.getTmpltTree,
*   baseAttrs: { uiProvider: Ext.tree.TreeCheckNodeUI } //添加 uiProvider 属性
*  }),
*  root: new Ext.tree.AsyncTreeNode({ id:'0' })
* });
* tree.on("check",function(node,checked){alert(node.text+" = "+checked)}); //注册"check"事件
* tree.render();
*
*/
Ext.tree.TreeCheckNodeUI = function() {
//'multiple':多选; 'single':单选; 'cascade':级联多选
this.checkModel = 'multiple';
//only leaf can checked
this.onlyLeafCheckable = false;
Ext.tree.TreeCheckNodeUI.superclass.constructor.apply(this, arguments);
};
Ext.extend(Ext.tree.TreeCheckNodeUI, Ext.tree.TreeNodeUI, {
renderElements : function(n, a, targetNode, bulkRender){
var tree = n.getOwnerTree();
this.checkModel = tree.checkModel || this.checkModel;
this.onlyLeafCheckable = tree.onlyLeafCheckable || false;
// add some indent caching, this helps performance when rendering a large tree
this.indentMarkup = n.parentNode ? n.parentNode.ui.getChildIndent() : '';
var cb = (!this.onlyLeafCheckable || a.leaf);
var href = a.href ? a.href : Ext.isGecko ? "" : "#";
var buf = ['&lt;li class="x-tree-node"&gt;&lt;div ext:tree-node-id="',n.id,'" class="x-tree-node-el x-tree-node-leaf x-unselectable ', a.cls,'" unselectable="on"&gt;',
'&lt;span class="x-tree-node-indent"&gt;',this.indentMarkup,"&lt;/span&gt;",
'&lt;img src="', this.emptyIcon, '" class="x-tree-ec-icon x-tree-elbow" /&gt;',
'&lt;img src="', a.icon || this.emptyIcon, '" class="x-tree-node-icon',(a.icon ? " x-tree-node-inline-icon" : ""),(a.iconCls ? " "+a.iconCls : ""),'" unselectable="on" /&gt;',
cb ? ('&lt;input class="x-tree-node-cb" type="checkbox" ' + (a.checked ? 'checked="checked" /&gt;' : '/&gt;')) : '',
'&lt;a hidefocus="on" class="x-tree-node-anchor" href="',href,'" tabIndex="1" ',
a.hrefTarget ? ' target="'+a.hrefTarget+'"' : "", '&gt;&lt;span unselectable="on"&gt;',n.text,"&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;",
'&lt;ul class="x-tree-node-ct" style="display:none;"&gt;&lt;/ul&gt;',
"&lt;/li&gt;"].join('');
var nel;
if(bulkRender !== true &amp;&amp; n.nextSibling &amp;&amp; (nel = n.nextSibling.ui.getEl())){
this.wrap = Ext.DomHelper.insertHtml("beforeBegin", nel, buf);
}else{
this.wrap = Ext.DomHelper.insertHtml("beforeEnd", targetNode, buf);
}
this.elNode = this.wrap.childNodes[0];
this.ctNode = this.wrap.childNodes[1];
var cs = this.elNode.childNodes;
this.indentNode = cs[0];
this.ecNode = cs[1];
this.iconNode = cs[2];
var index = 3;
if(cb){
this.checkbox = cs[3];
Ext.fly(this.checkbox).on('click', this.check.createDelegate(this,[null]));
index++;
}
this.anchor = cs[index];
this.textNode = cs[index].firstChild;
},
// private
check : function(checked){
var n = this.node;
var tree = n.getOwnerTree();
this.checkModel = tree.checkModel || this.checkModel;
if( checked === null ) {
checked = this.checkbox.checked;
} else {
this.checkbox.checked = checked;
}
n.attributes.checked = checked;
tree.fireEvent('check', n, checked);
if(!this.onlyLeafCheckable &amp;&amp; this.checkModel == 'cascade'){
var parentNode = n.parentNode;
if(parentNode !== null) {
this.parentCheck(parentNode,checked);
}
if( !n.expanded &amp;&amp; !n.childrenRendered ) {
n.expand(false,false,this.childCheck);
}
else {
this.childCheck(n);
}
}else if(this.checkModel == 'single'){
var checkedNodes = tree.getChecked();
for(var i=0;i&lt;checkedNodes.length;i++){
var node = checkedNodes[i];
if(node.id != n.id){
node.getUI().checkbox.checked = false;
node.attributes.checked = false;
tree.fireEvent('check', node, false);
}
}
}
},
// private
childCheck : function(node){
var a = node.attributes;
if(!a.leaf) {
var cs = node.childNodes;
var csui;
for(var i = 0; i &lt; cs.length; i++) {
csui = cs[i].getUI();
if(csui.checkbox.checked ^ a.checked)
csui.check(a.checked);
}
}
},
// private
parentCheck : function(node ,checked){
var checkbox = node.getUI().checkbox;
if(typeof checkbox == 'undefined')return ;
if(!(checked ^ checkbox.checked))return;
if(!checked &amp;&amp; this.childHasChecked(node))return;
checkbox.checked = checked;
node.attributes.checked = checked;
node.getOwnerTree().fireEvent('check', node, checked);
var parentNode = node.parentNode;
if( parentNode !== null){
this.parentCheck(parentNode,checked);
}
},
// private
childHasChecked : function(node){
var childNodes = node.childNodes;
if(childNodes || childNodes.length&gt;0){
for(var i=0;i&lt;childNodes.length;i++){
if(childNodes[i].getUI().checkbox.checked)
return true;
}
}
return false;
},
toggleCheck : function(value){
var cb = this.checkbox;
if(cb){
var checked = (value === undefined ? !cb.checked : value);
this.check(checked);
}
}
});</pre>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/fuhoujun/aggbug/232363.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fuhoujun/" target="_blank">付厚俊</a> 2008-10-04 19:32 <a href="http://www.blogjava.net/fuhoujun/archive/2008/10/04/232363.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ext2的树组件的使用（从底层到表现层，异步加载）</title><link>http://www.blogjava.net/fuhoujun/archive/2008/10/04/232360.html</link><dc:creator>付厚俊</dc:creator><author>付厚俊</author><pubDate>Sat, 04 Oct 2008 11:28:00 GMT</pubDate><guid>http://www.blogjava.net/fuhoujun/archive/2008/10/04/232360.html</guid><wfw:comment>http://www.blogjava.net/fuhoujun/comments/232360.html</wfw:comment><comments>http://www.blogjava.net/fuhoujun/archive/2008/10/04/232360.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fuhoujun/comments/commentRss/232360.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fuhoujun/services/trackbacks/232360.html</trackback:ping><description><![CDATA[<div class="code_title">js 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-c">
    <li class="alt"><span><span class="keyword">var</span><span>&nbsp;Tree&nbsp;=&nbsp;Ext.tree; &nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;tree&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Tree.TreePanel({ &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;el:'tree', &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;autoScroll:</span><span class="keyword">true</span><span>, &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;animate:</span><span class="keyword">true</span><span>, &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enableDD:</span><span class="keyword">true</span><span>, &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;containerScroll:&nbsp;</span><span class="keyword">true</span><span>,&nbsp; &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loader:&nbsp;</span><span class="keyword">new</span><span>&nbsp;Tree.TreeLoader({ &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataUrl:'moduletree.</span><span class="keyword">do</span><span>' &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}) &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;set&nbsp;the&nbsp;root&nbsp;node </span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;root&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Tree.AsyncTreeNode({ &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text:&nbsp;'管辖单位', &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;draggable:</span><span class="keyword">false</span><span>, &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id:'source' &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;tree.setRootNode(root); &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;render&nbsp;the&nbsp;tree </span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;tree.render(); &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;root.expand();&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>el决定了树的显示位置，一般是个div例如 </p>
<div id="tree">
<p>&nbsp;</p>
<p>dataUrl决定了树的json数据来源，我这里是一个struts的action，这个action会输出json数据</p>
<p>&nbsp;</p>
<p>在服务层要提供一个可以生成json格式数据的service，struts的任务是获取传来的参数调用service方法输出json</p>
<p>我在服务层生成json数据用的是jsonlib包，论坛有详细介绍的帖子，就不多说了</p>
<p>数据库有两个表来构建树，一个是树的节点表，至少包括树的id name 我这里还有一个haschild，代表有没有子节点。</p>
<p>另一个是节点关系表，两列分别是父节点和他对应的子节点。</p>
<p>service层调用dao的方法将结果集组装成List或者Map，再用jsonlib包提供的api将list转化成json,例如</p>
<div class="code_title">js 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-c">
    <li class="alt"><span><span class="comment">//根据用户的角色和id生成用户的管辖单位树 </span><span>&nbsp;&nbsp;</span></span>
    <li class=""><span class="keyword">public</span><span>&nbsp;List&nbsp;getsubdept(String&nbsp;userid,Long&nbsp;roleid){ &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">try</span><span>{ &nbsp;&nbsp;</span>
    <li class=""><span class="comment">//调用dao的方法查找到结果集 </span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;list=roledeptdao.findRoledept(userid,&nbsp;roleid); &nbsp;&nbsp;</span>
    <li class=""><span class="comment">//生成json所使用的单位list </span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;deptlist=</span><span class="keyword">new</span><span>&nbsp;ArrayList(); &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Iterator&nbsp;it=list.iterator(); &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">while</span><span>(it.hasNext()){ &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ruledept&nbsp;rd=(Ruledept)&nbsp;it.next(); &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map&nbsp;tree&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;HashMap(); &nbsp;&nbsp;</span>
    <li class=""><span class="comment">//节点显示单位名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>tree.put(</span><span class="string">"text"</span><span>,&nbsp;rd.getId().getTYwxtDept().getDeptName()); &nbsp;&nbsp;</span>
    <li class=""><span class="comment">//节点的id&nbsp; </span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree.put(</span><span class="string">"id"</span><span>,&nbsp;rd.getId().getTYwxtDept().getDeptId()); &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;value&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Object(); &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;=&nbsp;Boolean.TRUE; &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree.put(</span><span class="string">"cls"</span><span>,&nbsp;</span><span class="string">"file"</span><span>); &nbsp;&nbsp;</span>
    <li class="alt"><span class="comment">//是否是叶子节点，我这里只有一层所以直接写的TRUE </span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree.put(</span><span class="string">"leaf"</span><span>,&nbsp;value); &nbsp;&nbsp;</span>
    <li class="alt"><span class="comment">//将这个生成叶子节点对应的MAP加到单位list里 </span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;deptlist.add(tree); &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;deptlist; &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span class="keyword">catch</span><span>(Exception&nbsp;e){ &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log.error(</span><span class="string">"获取单位列表失败"</span><span>+e.getMessage()); &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;JSONArray&nbsp;getmoduletree(String&nbsp;userid,&nbsp;String&nbsp;roleid)&nbsp;{ &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;list=</span><span class="keyword">this</span><span>.getsubdept(userid,&nbsp;</span><span class="keyword">new</span><span>&nbsp;Long(roleid)); &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(list==</span><span class="keyword">null</span><span>){ &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li class=""><span class="comment">//转换这个list让他变成json格式&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;JSONArray&nbsp;jsonArray&nbsp;=&nbsp;JSONArray.fromObject(list); &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;jsonArray; &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>在action里面调用这个service方法：</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;ActionForward&nbsp;execute(ActionMapping&nbsp;mapping,&nbsp;ActionForm&nbsp;form, &nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)&nbsp;{ &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpSession&nbsp;httpsession=request.getSession(); &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;roleid=(String)&nbsp;httpsession.getAttribute(</span><span class="string">"role"</span><span>); &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UserInfo&nbsp;userinfo=(UserInfo)httpsession.getAttribute(</span><span class="string">"userinfo"</span><span>); &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;userid=userinfo.getUserID(); &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JSONArray&nbsp;jsonArray=</span><span class="keyword">this</span><span>.getRoledeptservice().getmoduletree(userid,&nbsp;roleid); &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.setContentType(</span><span class="string">"text/json;&nbsp;charset=GBK"</span><span>);&nbsp; &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">try</span><span>&nbsp;{ &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.getWriter().print(jsonArray); &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span class="keyword">catch</span><span>&nbsp;(IOException&nbsp;e)&nbsp;{ &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log.error(</span><span class="string">"输出json失败"</span><span>+e.getMessage()); &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>&nbsp;</p>
<p>这样一个完整的树就生成了，现在这个树是只有两层，如果是多层的就需要修改service方法来递归构造一个树的list再转化成json。</p>
<p>异步读取节点：首先，底层的service方法要做到每次生成的是传入参数的下一级节点的list，然后在js的<font face="Arial">&nbsp;tree.setRootNode(root);下面加上这句：</font>js 代码</p>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-c">
    <li class="alt"><span><span>tree.on('beforeload',&nbsp;</span><span class="keyword">function</span><span>(node){ &nbsp;&nbsp;</span></span>
    <li class=""><span>tree.loader.dataUrl&nbsp;=&nbsp;'createTree.</span><span class="keyword">do</span><span>?id='+node.id; &nbsp;&nbsp;</span>
    <li class="alt"><span>});&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>&nbsp;</p>
<p><span><span>tree.loader.dataUrl&nbsp;的值需要返回的就是该节点id的下一级的json数据</span></span></p>
<p><span>数据量大的时候异步加载要好的多，服务层也代码比起一次性全部加载的反复递归调用省不少。</span></p>
</div>
<img src ="http://www.blogjava.net/fuhoujun/aggbug/232360.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fuhoujun/" target="_blank">付厚俊</a> 2008-10-04 19:28 <a href="http://www.blogjava.net/fuhoujun/archive/2008/10/04/232360.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用Ext做的后台操作(包括,增,删,改,查)和一个异步加载的Ext树</title><link>http://www.blogjava.net/fuhoujun/archive/2008/10/04/232357.html</link><dc:creator>付厚俊</dc:creator><author>付厚俊</author><pubDate>Sat, 04 Oct 2008 11:12:00 GMT</pubDate><guid>http://www.blogjava.net/fuhoujun/archive/2008/10/04/232357.html</guid><wfw:comment>http://www.blogjava.net/fuhoujun/comments/232357.html</wfw:comment><comments>http://www.blogjava.net/fuhoujun/archive/2008/10/04/232357.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fuhoujun/comments/commentRss/232357.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fuhoujun/services/trackbacks/232357.html</trackback:ping><description><![CDATA[<ol class="dp-j">
    <li>&nbsp;<span>&nbsp;&nbsp;&nbsp;</span>
    <li><span>function&nbsp;createField(fieldLabel,&nbsp;id,&nbsp;name1,&nbsp;value)&nbsp;{ &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;field&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Ext.form.TextField({ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fieldLabel&nbsp;:&nbsp;fieldLabel, &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width&nbsp;:&nbsp;</span><span class="number">380</span><span>, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;itemCls&nbsp;:&nbsp;</span><span class="string">'all-field'</span><span>, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clearCls&nbsp;:&nbsp;</span><span class="string">'allow-float'</span><span>, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;allowBlank&nbsp;:&nbsp;</span><span class="keyword">false</span><span>, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;:&nbsp;name1, &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;:&nbsp;value &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;field; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>} &nbsp;&nbsp;</span>
    <li><span>function&nbsp;saveHandler(win,&nbsp;requestUrl,&nbsp;node,&nbsp;formPanel,&nbsp;isUpdate)&nbsp;{ &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/* </span>&nbsp;</span>
    <li><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Ext.MessageBox.show({&nbsp;title:'请稍候',&nbsp;msg:'保存中，请稍后...',&nbsp;progress:true, </span>&nbsp;</span>
    <li><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;buttons:&nbsp;{cancel:'取消'}&nbsp;}); </span>&nbsp;</span>
    <li><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;form&nbsp;=&nbsp;formPanel.getForm(); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;form.submit({ &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url&nbsp;:&nbsp;requestUrl, &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;waitMsg&nbsp;:&nbsp;</span><span class="string">'保存中，请稍候...'</span><span>, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;params&nbsp;:&nbsp;{}, &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;success&nbsp;:&nbsp;function(response,&nbsp;request)&nbsp;{ &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(!isUpdate)&nbsp;{ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.MessageBox.confirm(</span><span class="string">"状态"</span><span>,&nbsp;</span><span class="string">"保存成功,继续添加吗？"</span><span>,&nbsp;function(btn)&nbsp;{ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(btn&nbsp;!=&nbsp;</span><span class="string">'yes'</span><span>)&nbsp;{ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;win.close(); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span class="keyword">else</span><span>&nbsp;{ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.MessageBox.alert(</span><span class="string">'状态'</span><span>,&nbsp;</span><span class="string">'保存成功!'</span><span>); &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;win.close(); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(node.isLeaf())&nbsp;{ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;root&nbsp;=&nbsp;node.getOwnerTree().root; &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root.reload(); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root.expand(</span><span class="keyword">true</span><span>,&nbsp;</span><span class="keyword">true</span><span>); &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span class="keyword">else</span><span>&nbsp;{ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;root&nbsp;=&nbsp;node.getOwnerTree().root; &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root.reload(); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root.expand(</span><span class="keyword">true</span><span>,&nbsp;</span><span class="keyword">true</span><span>); &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}, &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;failure&nbsp;:&nbsp;function()&nbsp;{ &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.MessageBox.alert(</span><span class="string">'状态'</span><span>,&nbsp;</span><span class="string">'保存失败!'</span><span>); &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(node.isLeaf())&nbsp;{ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;root&nbsp;=&nbsp;node.getOwnerTree().root; &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root.reload(); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root.expand(</span><span class="keyword">true</span><span>,&nbsp;</span><span class="keyword">true</span><span>); &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span class="keyword">else</span><span>&nbsp;{ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;root&nbsp;=&nbsp;node.getOwnerTree().root; &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root.reload(); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root.expand(</span><span class="keyword">true</span><span>,&nbsp;</span><span class="keyword">true</span><span>); &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;</span>
    <li><span>} &nbsp;&nbsp;</span>
    <li><span class="comment">//&nbsp;修改form </span><span>&nbsp;&nbsp;</span></span>
    <li><span>function&nbsp;updateForm(node,&nbsp;id,&nbsp;title,&nbsp;win,&nbsp;requestUrl,&nbsp;value,&nbsp;isUpdate)&nbsp;{ &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;form0&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Ext.FormPanel({ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;:&nbsp;id, &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;labelWidth&nbsp;:&nbsp;</span><span class="number">75</span><span>,&nbsp;</span><span class="comment">//&nbsp;label&nbsp;settings&nbsp;here&nbsp;cascade&nbsp;unless&nbsp;overridden </span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frame&nbsp;:&nbsp;</span><span class="keyword">true</span><span>, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;title&nbsp;:&nbsp;title, &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bodyStyle&nbsp;:&nbsp;</span><span class="string">'padding:5px&nbsp;5px&nbsp;0'</span><span>, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width&nbsp;:&nbsp;</span><span class="number">350</span><span>, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;defaults&nbsp;:&nbsp;{ &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width&nbsp;:&nbsp;</span><span class="number">230</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;nameField&nbsp;=&nbsp;createField(</span><span class="string">'章节名称'</span><span>,&nbsp;</span><span class="string">'createItemText'</span><span>&nbsp;+&nbsp;id&nbsp;+&nbsp;node.id, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="string">'name'</span><span>,&nbsp;value); &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;form0.add(nameField); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;form0.addButton({ &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;:&nbsp;</span><span class="string">'保存'</span><span>, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handler&nbsp;:&nbsp;function()&nbsp;{ &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;saveHandler(win,&nbsp;requestUrl,&nbsp;node,&nbsp;form0,&nbsp;isUpdate); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;form0; &nbsp;&nbsp;</span></span>
    <li><span>} &nbsp;&nbsp;</span>
    <li><span class="comment">//&nbsp;创建form </span><span>&nbsp;&nbsp;</span></span>
    <li><span>function&nbsp;createForm(node,&nbsp;id,&nbsp;title,&nbsp;win,&nbsp;requestUrl,&nbsp;value,&nbsp;isUpdate)&nbsp;{ &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;form0&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Ext.FormPanel({ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;:&nbsp;id, &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;labelWidth&nbsp;:&nbsp;</span><span class="number">75</span><span>,&nbsp;</span><span class="comment">//&nbsp;label&nbsp;settings&nbsp;here&nbsp;cascade&nbsp;unless&nbsp;overridden </span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frame&nbsp;:&nbsp;</span><span class="keyword">true</span><span>, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;title&nbsp;:&nbsp;title, &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bodyStyle&nbsp;:&nbsp;</span><span class="string">'padding:5px&nbsp;5px&nbsp;0'</span><span>, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width&nbsp;:&nbsp;</span><span class="number">500</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;defaults&nbsp;:&nbsp;{ </span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;width&nbsp;:&nbsp;230 </span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;} </span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;nameField&nbsp;=&nbsp;createField(</span><span class="string">'章节名称'</span><span>,&nbsp;</span><span class="string">'createItemText'</span><span>&nbsp;+&nbsp;id&nbsp;+&nbsp;node.id, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="string">'name'</span><span>,&nbsp;value); &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;unitField&nbsp;=&nbsp;createField(</span><span class="string">'组织名称'</span><span>,&nbsp;</span><span class="string">'createItemText'</span><span>&nbsp;+&nbsp;id&nbsp;+&nbsp;node.id, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="string">'unit'</span><span>,&nbsp;value); &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;areaField&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Ext.form.TextArea({ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fieldLabel&nbsp;:&nbsp;</span><span class="string">'章节编辑'</span><span>, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;width:980, </span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;x:400, </span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;y:400, </span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;itemCls:'all-field', </span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;clearCls:'allow-float', </span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;allowBlank:true, </span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;style:"width:100px;height:60px;", </span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;autocomplete:&nbsp;"off", </span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;height:400, </span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;height&nbsp;:&nbsp;</span><span class="number">400</span><span>, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width&nbsp;:&nbsp;</span><span class="number">500</span><span>, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;grow&nbsp;:&nbsp;</span><span class="keyword">false</span><span>, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;:&nbsp;</span><span class="string">'sectionText'</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;form0.add(nameField); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;form0.add(unitField); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;form0.add(areaField); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;form0.addButton({ &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;:&nbsp;</span><span class="string">'保存'</span><span>, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handler&nbsp;:&nbsp;function()&nbsp;{ &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;saveHandler(win,&nbsp;requestUrl,&nbsp;node,&nbsp;form0,&nbsp;isUpdate); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;form0; &nbsp;&nbsp;</span></span>
    <li><span>} &nbsp;&nbsp;</span>
    <li><span class="comment">//&nbsp;编辑form </span><span>&nbsp;&nbsp;</span></span>
    <li><span>function&nbsp;editorForm(node,&nbsp;id,&nbsp;title,&nbsp;win,&nbsp;requestUrl,&nbsp;value,&nbsp;isUpdate)&nbsp;{ &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;form0&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Ext.FormPanel({ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;:&nbsp;id, &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;labelWidth&nbsp;:&nbsp;</span><span class="number">75</span><span>,&nbsp;</span><span class="comment">//&nbsp;label&nbsp;settings&nbsp;here&nbsp;cascade&nbsp;unless&nbsp;overridden </span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frame&nbsp;:&nbsp;</span><span class="keyword">true</span><span>, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;title&nbsp;:&nbsp;title, &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bodyStyle&nbsp;:&nbsp;</span><span class="string">'padding:5px&nbsp;5px&nbsp;0'</span><span>, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width&nbsp;:&nbsp;</span><span class="number">500</span><span>, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;defaults&nbsp;:&nbsp;{ </span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;width&nbsp;:&nbsp;1230 </span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;}, </span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reader&nbsp;:&nbsp;</span><span class="keyword">new</span><span>&nbsp;Ext.data.JsonReader({ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;:&nbsp;</span><span class="string">'list'</span><span>, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fields&nbsp;:&nbsp;[{ &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;:&nbsp;</span><span class="string">'sectionText'</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}] &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}) &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;var </span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;nameField=createField('章节名称','createItemText'+id+node.id,'sectionText',value </span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;); </span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;nameField&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Ext.form.TextArea({ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fieldLabel&nbsp;:&nbsp;</span><span class="string">'章节编辑'</span><span>, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;grow&nbsp;:&nbsp;</span><span class="keyword">false</span><span>, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;inputType&nbsp;:&nbsp;'textarea', </span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;height&nbsp;:&nbsp;</span><span class="number">450</span><span>, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width&nbsp;:&nbsp;</span><span class="number">500</span><span>, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;labelWidth&nbsp;:&nbsp;1000, </span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;growMin&nbsp;:&nbsp;5, </span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;labelStyle&nbsp;:&nbsp;'width:1000px;height:1000px', </span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;growMax:true, </span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;width:980, </span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;x:400, </span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;y:400, </span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;itemCls:'all-field', </span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;clearCls:'allow-float', </span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;allowBlank:false, </span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;style:"width:300px;overflow-y:visible", </span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;:&nbsp;</span><span class="string">'sectionText'</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;form0.add(nameField); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;form0.addButton({ &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;:&nbsp;</span><span class="string">'保存'</span><span>, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handler&nbsp;:&nbsp;function()&nbsp;{ &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;saveHandler(win,&nbsp;requestUrl,&nbsp;node,&nbsp;form0,&nbsp;isUpdate); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;id&nbsp;=&nbsp;node.id; &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;form0.getForm().load({ &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url&nbsp;:&nbsp;</span><span class="string">'/getSectionText/?id='</span><span>&nbsp;+&nbsp;id, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;waitMsg&nbsp;:&nbsp;</span><span class="string">'Loading'</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;form0; &nbsp;&nbsp;</span></span>
    <li><span>} &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span class="comment">//&nbsp;2&nbsp;创建&nbsp;tab&nbsp;panel </span><span>&nbsp;&nbsp;</span></span>
    <li><span>function&nbsp;createTabPanel(node,&nbsp;e,&nbsp;type,&nbsp;win)&nbsp;{ &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;createUrl&nbsp;=&nbsp;</span><span class="string">'/createSection/?id='</span><span>&nbsp;+&nbsp;node.attributes.id; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;updateUrl&nbsp;=&nbsp;</span><span class="string">'/updateSection/?id='</span><span>&nbsp;+&nbsp;node.attributes.id; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;editorUrl&nbsp;=&nbsp;</span><span class="string">'/editorSection/?id='</span><span>&nbsp;+&nbsp;node.attributes.id; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;panel&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Ext.TabPanel({ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;el:&nbsp;'hello-tabs', </span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;autoTabs&nbsp;:&nbsp;</span><span class="keyword">true</span><span>, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;activeTab&nbsp;:&nbsp;</span><span class="number">0</span><span>, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;deferredRender&nbsp;:&nbsp;</span><span class="keyword">false</span><span>, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;border&nbsp;:&nbsp;</span><span class="keyword">false</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;form0&nbsp;=&nbsp;createForm(node,&nbsp;</span><span class="string">'form0'</span><span>&nbsp;+&nbsp;node.id,&nbsp;</span><span class="string">'新建子章节'</span><span>,&nbsp;win,&nbsp;createUrl, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="string">''</span><span>,&nbsp;</span><span class="keyword">false</span><span>); &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;form1&nbsp;=&nbsp;updateForm(node,&nbsp;</span><span class="string">'form1'</span><span>&nbsp;+&nbsp;node.id,&nbsp;</span><span class="string">'修改章节名称'</span><span>,&nbsp;win,&nbsp;updateUrl, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node.text,&nbsp;</span><span class="keyword">true</span><span>); &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;form2&nbsp;=&nbsp;editorForm(node,&nbsp;</span><span class="string">'form2'</span><span>&nbsp;+&nbsp;node.id,&nbsp;</span><span class="string">'章节编辑'</span><span>,&nbsp;win,&nbsp;editorUrl,&nbsp;</span><span class="string">''</span><span>, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">true</span><span>); &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;panel.add(form2); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;panel.add(form0); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;panel.add(form1); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;panel; &nbsp;&nbsp;</span></span>
    <li><span>} &nbsp;&nbsp;</span>
    <li><span class="comment">//&nbsp;组装 </span><span>&nbsp;&nbsp;</span></span>
    <li><span>function&nbsp;itemManage(node,&nbsp;e)&nbsp;{ &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;type&nbsp;=&nbsp;</span><span class="string">"电子书章节管理"</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;create&nbsp;the&nbsp;window&nbsp;on&nbsp;the&nbsp;first&nbsp;click&nbsp;and&nbsp;reuse&nbsp;on&nbsp;subsequent&nbsp;clicks </span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;win&nbsp;=&nbsp;Ext.getCmp(</span><span class="string">'win'</span><span>&nbsp;+&nbsp;type&nbsp;+&nbsp;node.id); &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(!win)&nbsp;{ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;win&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Ext.Window({ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;title&nbsp;:&nbsp;type, &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;:&nbsp;</span><span class="string">'win'</span><span>&nbsp;+&nbsp;type&nbsp;+&nbsp;node.id, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;layout&nbsp;:&nbsp;</span><span class="string">'fit'</span><span>, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maximizable&nbsp;:&nbsp;</span><span class="keyword">true</span><span>,</span><span class="comment">//&nbsp;最大化 </span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;collapsible&nbsp;:&nbsp;</span><span class="keyword">true</span><span>,</span><span class="comment">//&nbsp;可折叠 </span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width&nbsp;:&nbsp;</span><span class="number">800</span><span>, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;height&nbsp;:&nbsp;</span><span class="number">600</span><span>, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;closeAction:'hide', </span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;plain&nbsp;:&nbsp;</span><span class="keyword">true</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;tab&nbsp;=&nbsp;createTabPanel(node,&nbsp;e,&nbsp;type,&nbsp;win); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;win.add(tab); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;win.show(); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>} &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span class="comment">//&nbsp;grid.addListener('rowdbclick',function(){ </span><span>&nbsp;&nbsp;</span></span>
    <li><span class="comment">//&nbsp;alert("123"); </span><span>&nbsp;&nbsp;</span></span>
    <li><span class="comment">//&nbsp;}); </span><span>&nbsp;&nbsp;</span></span>
    <li><span>Ext.ux.makeMenu&nbsp;=&nbsp;function(node,&nbsp;event,&nbsp;title,&nbsp;requestUrl)&nbsp;{ &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;rightClick&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Ext.menu.Menu({ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;:&nbsp;</span><span class="string">'rightClickCont'</span><span>&nbsp;+&nbsp;node.id, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;items&nbsp;:&nbsp;[{ &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;:&nbsp;node.id&nbsp;+&nbsp;</span><span class="string">"menu"</span><span>, &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;:&nbsp;title, &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;增加菜单点击事件 </span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handler&nbsp;:&nbsp;function()&nbsp;{ &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.Ajax.request({ &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url&nbsp;:&nbsp;requestUrl, &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;params&nbsp;:&nbsp;{ &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}, &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;success&nbsp;:&nbsp;function(response,&nbsp;request)&nbsp;{ &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.MessageBox.alert(</span><span class="string">"状态"</span><span>,&nbsp;</span><span class="string">"删除成功"</span><span>,&nbsp;function()&nbsp;{ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(node.isLeaf())&nbsp;{ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;root&nbsp;=&nbsp;node.getOwnerTree().root; &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root.reload(); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root.expand(</span><span class="keyword">true</span><span>,&nbsp;</span><span class="keyword">true</span><span>); &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span class="keyword">else</span><span>&nbsp;{ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;root&nbsp;=&nbsp;node.getOwnerTree().root; &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root.reload(); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root.expand(</span><span class="keyword">true</span><span>,&nbsp;</span><span class="keyword">true</span><span>); &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}, &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;failure&nbsp;:&nbsp;function()&nbsp;{ &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;Ext.MessageBox.hide(); </span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.MessageBox.alert(</span><span class="string">'状态'</span><span>,&nbsp;</span><span class="string">'删除失败!'</span><span>); &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(node.isLeaf())&nbsp;{ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;root&nbsp;=&nbsp;node.getOwnerTree().root; &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root.reload(); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root.expand(</span><span class="keyword">true</span><span>,&nbsp;</span><span class="keyword">true</span><span>); &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span class="keyword">else</span><span>&nbsp;{ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;root&nbsp;=&nbsp;node.getOwnerTree().root; &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root.reload(); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root.expand(</span><span class="keyword">true</span><span>,&nbsp;</span><span class="keyword">true</span><span>); &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}] &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;event.preventDefault(); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;rightClick.showAt(event.getXY());</span><span class="comment">//&nbsp;取得鼠标点击坐标，展示菜单 </span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>};&nbsp;&nbsp;</span> </li>
</ol>
<img src ="http://www.blogjava.net/fuhoujun/aggbug/232357.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fuhoujun/" target="_blank">付厚俊</a> 2008-10-04 19:12 <a href="http://www.blogjava.net/fuhoujun/archive/2008/10/04/232357.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>extjs+struts2+spring例子</title><link>http://www.blogjava.net/fuhoujun/archive/2008/10/04/232319.html</link><dc:creator>付厚俊</dc:creator><author>付厚俊</author><pubDate>Sat, 04 Oct 2008 06:35:00 GMT</pubDate><guid>http://www.blogjava.net/fuhoujun/archive/2008/10/04/232319.html</guid><wfw:comment>http://www.blogjava.net/fuhoujun/comments/232319.html</wfw:comment><comments>http://www.blogjava.net/fuhoujun/archive/2008/10/04/232319.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fuhoujun/comments/commentRss/232319.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fuhoujun/services/trackbacks/232319.html</trackback:ping><description><![CDATA[<span class="hilite1">struts2</span>的<span class="hilite2">json</span> plugin的位置在：http://code.google.com/p/<span class="hilite2">json</span>plugin/<br />
下载<span class="hilite2">json</span> plugin的jar包，放到/WEB-INF/lib/目录下就可以了<br />
<br />
Spring + Struts + JPA的项目结构如其他例子中的一致<br />
首先是web.xml<br />
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">"1.0"</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">"UTF-8"</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span><span class="tag">&lt;</span><span class="tag-name">web-app</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">"WebApp_ID"</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">"2.4"</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">xmlns</span><span>=</span><span class="attribute-value">"http://java.sun.com/xml/ns/j2ee"</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">xmlns:xsi</span><span>=</span><span class="attribute-value">"http://www.w3.org/2001/XMLSchema-instance"</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">xsi:schemaLocation</span><span>=</span><span class="attribute-value">"http://java.sun.com/xml/ns/j2ee&nbsp;http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">display-name</span><span class="tag">&gt;</span><span>quickstart</span><span class="tag">&lt;/</span><span class="tag-name">display-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">filter</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span><span class="hilite1">struts2</span></span><span class="tag">&lt;/</span><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">filter-class</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.<span class="hilite1">struts2</span>.dispatcher.FilterDispatcher&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">filter-class</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">filter</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">filter</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span>jpaFilter</span><span class="tag">&lt;/</span><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">filter-class</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">filter-class</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">init-param</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">param-name</span><span class="tag">&gt;</span><span>entityManagerFactory</span><span class="tag">&lt;/</span><span class="tag-name">param-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">param-value</span><span class="tag">&gt;</span><span>entityManagerFactory</span><span class="tag">&lt;/</span><span class="tag-name">param-value</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">init-param</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">filter</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">filter-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span>jpaFilter</span><span class="tag">&lt;/</span><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>*.action</span><span class="tag">&lt;/</span><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">filter-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">filter-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span><span class="hilite1">struts2</span></span><span class="tag">&lt;/</span><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>/*</span><span class="tag">&lt;/</span><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">filter-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">welcome-file-list</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">welcome-file</span><span class="tag">&gt;</span><span>index.jsp</span><span class="tag">&lt;/</span><span class="tag-name">welcome-file</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">welcome-file-list</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">listener</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">listener-class</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.springframework.web.context.ContextLoaderListener&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">listener-class</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">listener</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span><span class="tag">&lt;/</span><span class="tag-name">web-app</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<br />
加入<span><span>jpaFilter，是为了不让hibernate的session过早关闭，因为有的action会通过ajax动态调用。<br />
下面是struts.xml，注意struts.xml需要放在源代码目录下面：<br />
<br />
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">"1.0"</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">"UTF-8"</span><span>&nbsp;</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&lt;!DOCTYPE&nbsp;struts&nbsp;PUBLIC&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;"-//Apache&nbsp;Software&nbsp;Foundation//DTD&nbsp;Struts&nbsp;Configuration&nbsp;2.0//EN"&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;"http://struts.apache.org/dtds/struts-2.0.dtd"<span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">struts</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">constant</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"struts.objectFactory"</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">"spring"</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">constant</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"struts.devMode"</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">"true"</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">constant</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"struts.i18n.encoding"</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">"UTF-8"</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">package</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"person"</span><span>&nbsp;</span><span class="attribute">extends</span><span>=</span><span class="attribute-value">"<span class="hilite2">json</span>-default"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">action</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"list"</span><span>&nbsp;</span><span class="attribute">method</span><span>=</span><span class="attribute-value">"execute"</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"personaction"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">result</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"<span class="hilite2">json</span>"</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">action</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">package</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span><span class="tag">&lt;/</span><span class="tag-name">struts</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<br />
这里注意，</span></span><span><span><span><span class="attribute-value">struts.objectFactory告诉struts所有的action都到spring的上下文里面去找，另外还需要注意，我们自己的包要继承自<span class="hilite2">json</span>-default，这样才可以在result的type属性中使用<span class="hilite2">json</span>。<br />
下面是spring的配置文件applicationContext.xml：<br />
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">"1.0"</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">"UTF-8"</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span><span class="tag">&lt;</span><span class="tag-name">beans</span><span>&nbsp;</span><span class="attribute">xmlns</span><span>=</span><span class="attribute-value">"http://www.springframework.org/schema/beans"</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">xmlns:xsi</span><span>=</span><span class="attribute-value">"http://www.w3.org/2001/XMLSchema-instance"</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">xmlns:aop</span><span>=</span><span class="attribute-value">"http://www.springframework.org/schema/aop"</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">xmlns:tx</span><span>=</span><span class="attribute-value">"http://www.springframework.org/schema/tx"</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">xsi:schemaLocation</span><span>="&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/beans&nbsp;http://www.springframework.org/schema/beans/spring-beans-2.0.xsd&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/tx&nbsp;http://www.springframework.org/schema/tx/spring-tx-2.0.xsd&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/aop&nbsp;http://www.springframework.org/schema/aop/spring-aop-2.0.xsd"<span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">class</span><span>=</span><span class="attribute-value">"org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">"entityManagerFactory"</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">class</span><span>=</span><span class="attribute-value">"org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"dataSource"</span><span>&nbsp;</span><span class="attribute">ref</span><span>=</span><span class="attribute-value">"dataSource"</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"jpaVendorAdapter"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">class</span><span>=</span><span class="attribute-value">"org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"database"</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">"MYSQL"</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"showSql"</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">"true"</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">bean</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">bean</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">"dataSource"</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">class</span><span>=</span><span class="attribute-value">"org.springframework.jdbc.datasource.DriverManagerDataSource"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"driverClassName"</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">"com.mysql.jdbc.Driver"</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"url"</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">"jdbc:mysql://localhost/extjs"</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"username"</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">"root"</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"password"</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">""</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">bean</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">"transactionManager"</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">class</span><span>=</span><span class="attribute-value">"org.springframework.orm.jpa.JpaTransactionManager"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"entityManagerFactory"</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">ref</span><span>=</span><span class="attribute-value">"entityManagerFactory"</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">bean</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">tx:annotation-driven</span><span>&nbsp;</span><span class="attribute">transaction-manager</span><span>=</span><span class="attribute-value">"transactionManager"</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">&lt;!--Service&nbsp;开始&nbsp;--&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">"personService"</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"com.myext.service.impl.PersonServiceJpaImpl"</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">"personaction"</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"com.myext.action.PersonPageAction"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"person"</span><span>&nbsp;</span><span class="attribute">ref</span><span>=</span><span class="attribute-value">"personService"</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">bean</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span><span class="tag">&lt;/</span><span class="tag-name">beans</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<br />
这里的bean personaction和strutx.xml中的action class一致就可以了，下面是代码：<br />
action：<br />
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">package</span><span> com.myext.action; </span></span>
    <li>
    <li class="alt"><span><span class="keyword">import</span><span> java.util.ArrayList; </span></span>
    <li><span><span class="keyword">import</span><span> java.util.List; </span></span>
    <li class="alt">
    <li><span><span class="keyword">import</span><span> com.myext.service.PersonService; </span></span>
    <li class="alt">
    <li><span><span class="keyword">public</span><span> </span><span class="keyword">class</span><span> PersonPageAction { </span></span>
    <li class="alt"><span><span class="keyword">private</span><span> </span><span class="keyword">int</span><span> limit=</span><span class="number">10</span><span>; </span></span>
    <li><span><span class="keyword">private</span><span> </span><span class="keyword">int</span><span> start=</span><span class="number">0</span><span>; </span></span>
    <li class="alt"><span><span class="keyword">private</span><span> PersonService person; </span></span>
    <li><span><span class="keyword">private</span><span> </span><span class="keyword">int</span><span> total=</span><span class="number">0</span><span>; </span></span>
    <li class="alt"><span><span class="keyword">private</span><span> List persons = </span><span class="keyword">new</span><span> ArrayList(); </span></span>
    <li><span><span class="keyword">private</span><span> </span><span class="keyword">boolean</span><span> success=</span><span class="keyword">true</span><span>; </span></span>
    <li class="alt"><span><span class="keyword">public</span><span> </span><span class="keyword">boolean</span><span> getSuccess(){ </span></span>
    <li><span><span class="keyword">return</span><span> </span><span class="keyword">this</span><span>.success; </span></span>
    <li class="alt"><span>} </span>
    <li><span><span class="keyword">public</span><span> </span><span class="keyword">void</span><span> setLimit(</span><span class="keyword">int</span><span> limit) { </span></span>
    <li class="alt"><span><span class="keyword">this</span><span>.limit = limit; </span></span>
    <li><span>} </span>
    <li class="alt">
    <li><span><span class="keyword">public</span><span> </span><span class="keyword">void</span><span> setStart(</span><span class="keyword">int</span><span> start) { </span></span>
    <li class="alt"><span><span class="keyword">this</span><span>.start = start; </span></span>
    <li><span>} </span>
    <li class="alt">
    <li>
    <li class="alt"><span><span class="keyword">public</span><span> </span><span class="keyword">void</span><span> setPerson(PersonService person) { </span></span>
    <li><span><span class="keyword">this</span><span>.person = person; </span></span>
    <li class="alt"><span>} </span>
    <li>
    <li class="alt"><span><span class="keyword">public</span><span> </span><span class="keyword">int</span><span> getTotal() { </span></span>
    <li><span><span class="keyword">return</span><span> total; </span></span>
    <li class="alt"><span>} </span>
    <li>
    <li class="alt"><span><span class="keyword">public</span><span> </span><span class="keyword">void</span><span> setTotal(</span><span class="keyword">int</span><span> total) { </span></span>
    <li><span><span class="keyword">this</span><span>.total = total; </span></span>
    <li class="alt"><span>} </span>
    <li>
    <li class="alt"><span><span class="keyword">public</span><span> List getPersons() { </span></span>
    <li><span><span class="keyword">return</span><span> persons; </span></span>
    <li class="alt"><span>} </span>
    <li>
    <li class="alt"><span><span class="keyword">public</span><span> </span><span class="keyword">void</span><span> setPersons(List persons) { </span></span>
    <li><span><span class="keyword">this</span><span>.persons = persons; </span></span>
    <li class="alt"><span>} </span>
    <li>
    <li class="alt"><span><span class="keyword">public</span><span> String execute(){ </span></span>
    <li><span><span class="keyword">this</span><span>.total = person.getTotal(); </span></span>
    <li class="alt"><span><span class="keyword">this</span><span>.persons = person.getPage(</span><span class="keyword">this</span><span>.start, </span><span class="keyword">this</span><span>.limit); </span></span>
    <li><span><span class="keyword">return</span><span> </span><span class="string">"success"</span><span>; </span></span>
    <li class="alt"><span>} </span>
    <li><span>} </span></li>
</ol>
</div>
service：<br />
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">package</span><span> com.myext.service.impl; </span></span>
    <li>
    <li class="alt"><span><span class="keyword">import</span><span> java.util.List; </span></span>
    <li>
    <li class="alt"><span><span class="keyword">import</span><span> javax.persistence.EntityManager; </span></span>
    <li><span><span class="keyword">import</span><span> javax.persistence.PersistenceContext; </span></span>
    <li class="alt"><span><span class="keyword">import</span><span> javax.persistence.Query; </span></span>
    <li>
    <li class="alt"><span><span class="keyword">import</span><span> com.myext.model.Person; </span></span>
    <li><span><span class="keyword">import</span><span> com.myext.service.PersonService; </span></span>
    <li class="alt">
    <li><span><span class="keyword">public</span><span> </span><span class="keyword">class</span><span> PersonServiceJpaImpl </span><span class="keyword">implements</span><span> PersonService { </span></span>
    <li class="alt"><span><span class="keyword">private</span><span> EntityManager em; </span></span>
    <li><span><span class="keyword">private</span><span> </span><span class="keyword">static</span><span> String poname = Person.</span><span class="keyword">class</span><span>.getName(); </span></span>
    <li class="alt"><span><span class="annotation">@PersistenceContext</span><span> </span></span>
    <li><span><span class="keyword">public</span><span> </span><span class="keyword">void</span><span> setEntityManager(EntityManager em){ </span></span>
    <li class="alt"><span><span class="keyword">this</span><span>.em = em; </span></span>
    <li><span>} </span>
    <li class="alt"><span><span class="annotation">@SuppressWarnings</span><span>(</span><span class="string">"unchecked"</span><span>) </span></span>
    <li><span><span class="annotation">@Override</span><span> </span></span>
    <li class="alt"><span><span class="keyword">public</span><span> List getPage( </span><span class="keyword">int</span><span> start, </span><span class="keyword">int</span><span> limit) { </span></span>
    <li><span>Query q = <span class="keyword">this</span><span>.em.createQuery(</span><span class="string">"from "</span><span> + poname ); </span></span>
    <li class="alt"><span>q.setFirstResult(start); </span>
    <li><span>q.setMaxResults(limit); </span>
    <li class="alt"><span><span class="keyword">return</span><span> q.getResultList(); </span></span>
    <li><span>} </span>
    <li class="alt"><span><span class="annotation">@Override</span><span> </span></span>
    <li><span><span class="keyword">public</span><span> </span><span class="keyword">int</span><span> getTotal() { </span></span>
    <li class="alt"><span><span class="keyword">return</span><span> </span><span class="keyword">this</span><span>.em.createQuery(</span><span class="string">"from "</span><span> + poname).getResultList().size(); </span></span>
    <li><span>} </span>
    <li class="alt">
    <li><span>} </span></li>
</ol>
</div>
页面的代码：<br />
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag"><span class="tag-name">xml</span><span> </span><span class="attribute">version</span><span>=</span><span class="attribute-value">"1.0"</span><span> </span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">"UTF-8"</span><span> </span><span class="tag">?&gt;</span><span> </span></span></span>
    <li><span><span class="tag">&lt;</span><span>%@ page </span><span class="attribute">language</span><span>=</span><span class="attribute-value">"java"</span><span> </span><span class="attribute">contentType</span><span>=</span><span class="attribute-value">"text/html; charset=UTF-8"</span><span> </span></span>
    <li class="alt"><span><span class="attribute">pageEncoding</span><span>=</span><span class="attribute-value">"UTF-8"</span><span>%</span><span class="tag">&gt;</span><span> </span></span>
    <li><span><span class="tag">&gt;</span><span> </span></span>
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">html</span><span> </span><span class="attribute">xmlns</span><span>=</span><span class="attribute-value">"http://www.w3.org/1999/xhtml"</span><span class="tag">&gt;</span><span> </span></span>
    <li><span><span class="tag">&lt;</span><span class="tag-name">head</span><span class="tag">&gt;</span><span> </span></span>
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">meta</span><span> </span><span class="attribute">http-equiv</span><span>=</span><span class="attribute-value">"Content-Type"</span><span> </span><span class="attribute">content</span><span>=</span><span class="attribute-value">"text/html; charset=UTF-8"</span><span> </span><span class="tag">/&gt;</span><span> </span></span>
    <li><span><span class="tag">&lt;</span><span class="tag-name">title</span><span class="tag">&gt;</span><span>Grid3</span><span class="tag"><!--</span--><span class="tag-name">title</span><span class="tag">&gt;</span><span> </span></span></span>
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">link</span><span> </span><span class="attribute">rel</span><span>=</span><span class="attribute-value">"stylesheet"</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">"text/css"</span><span> </span><span class="attribute">href</span><span>=</span><span class="attribute-value">"extjs/resources/css/ext-all.css"</span><span> </span><span class="tag">/&gt;</span><span> </span></span>
    <li><span><span class="comments"><!--</span> </span></li>
    <li class="alt"><span><span class="comments"><link rel="stylesheet" type="text/css" href="extjs/resources/css/xtheme-gray.css" /></link></span> </span></li>
    <li><span><span class="comments">--></span></span>
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">script</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">"text/javascript"</span><span> </span><span class="attribute">src</span><span>=</span><span class="attribute-value">"extjs/adapter/ext/ext-base.js"</span><span class="tag">&gt;</span><span class="tag"><!--</span--><span class="tag-name">script</span><span class="tag">&gt;</span><span> </span></span></span>
    <li>
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">script</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">"text/javascript"</span><span> </span><span class="attribute">src</span><span>=</span><span class="attribute-value">"extjs/ext-all.js"</span><span class="tag">&gt;</span><span class="tag"><!--</span--><span class="tag-name">script</span><span class="tag">&gt;</span><span> </span></span></span>
    <li><span><span class="tag">&lt;</span><span class="tag-name">script</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">"text/javascript"</span><span> </span><span class="attribute">src</span><span>=</span><span class="attribute-value">"extjs/ext-lang-zh_CN.js"</span><span class="tag">&gt;</span><span class="tag"><!--</span--><span class="tag-name">script</span><span class="tag">&gt;</span><span> </span></span></span>
    <li class="alt"><span><span class="tag"><!--</span--><span class="tag-name">head</span><span class="tag">&gt;</span><span> </span></span></span>
    <li><span><span class="tag">&lt;</span><span class="tag-name">body</span><span class="tag">&gt;</span><span> </span></span>
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">script</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">"text/javascript"</span><span> </span><span class="attribute">src</span><span>=</span><span class="attribute-value">"grid3.js"</span><span class="tag">&gt;</span><span class="tag"><!--</span--><span class="tag-name">script</span><span class="tag">&gt;</span><span> </span></span></span>
    <li><span><span class="tag">&lt;</span><span class="tag-name">div</span><span> </span><span class="attribute">id</span><span>=</span><span class="attribute-value">"grid3"</span><span> </span><span class="tag">&gt;</span><span> </span></span>
    <li class="alt"><span><span class="tag"><!--</span--><span class="tag-name">div</span><span class="tag">&gt;</span><span> </span></span></span>
    <li><span><span class="tag"><!--</span--><span class="tag-name">body</span><span class="tag">&gt;</span><span> </span></span></span>
    <li class="alt"><span><span class="tag"><!--</span--><span class="tag-name">html</span><span class="tag">&gt;</span><span> </span></span></span></li>
</ol>
</div>
grid3.js代码<br />
<div class="code_title">js 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-c">
    <li class="alt"><span><span class="comment">/**</span> </span>
    <li><span><span class="comment">* @author fox</span> </span>
    <li class="alt"><span><span class="comment">*/</span><span> </span></span>
    <li><span>Ext.onReady(<span class="keyword">function</span><span>(){ </span></span>
    <li class="alt"><span>Ext.BLANK_IMAGE_URL = 'extjs/resources/images/<span class="keyword">default</span><span>/s.gif'; </span></span>
    <li><span>Ext.QuickTips.init(); </span>
    <li class="alt"><span><span class="keyword">var</span><span> sm = </span><span class="keyword">new</span><span> Ext.grid.CheckboxSelectionModel(); //CheckBox选择列 </span></span>
    <li><span><span class="keyword">var</span><span> cm = </span><span class="keyword">new</span><span> Ext.grid.ColumnModel([ </span></span>
    <li class="alt"><span><span class="keyword">new</span><span> Ext.grid.RowNumberer(), //行号列 </span></span>
    <li><span>sm, </span>
    <li class="alt"><span>{header:'编号',dataIndex:'id'}, </span>
    <li><span>{header:'性别',dataIndex:'sex',renderer:<span class="keyword">function</span><span>(value){ </span></span>
    <li class="alt"><span><span class="keyword">if</span><span>(value=='male'){ </span></span>
    <li><span><span class="keyword">return</span><span> </span><span class="string">"<span style="font-weight: bold; color: red">男</span>"</span><span>; </span></span>
    <li class="alt"><span>}<span class="keyword">else</span><span>{ </span></span>
    <li><span><span class="keyword">return</span><span> </span><span class="string">"<span style="font-weight: bold; color: green">女</span>"</span><span>; </span></span>
    <li class="alt"><span>} </span>
    <li><span>}}, <span class="comment">//增加性别，自定义renderer，即显示的样式，可以加html代码，来显示图片等。</span><span> </span></span>
    <li class="alt"><span>{header:'名称',dataIndex:'name'}, </span>
    <li><span>{header:'描述',dataIndex:'descn'} </span>
    <li class="alt"><span>]); </span>
    <li>
    <li class="alt">
    <li><span><span class="keyword">var</span><span> ds = </span><span class="keyword">new</span><span> Ext.data.Store({ </span></span>
    <li class="alt"><span>proxy: <span class="keyword">new</span><span> Ext.data.HttpProxy({url:'list.action'}),//调用的动作 </span></span>
    <li><span>reader: <span class="keyword">new</span><span> Ext.data.<span class="hilite2">Json</span>Reader({ </span></span>
    <li class="alt"><span>totalProperty: 'total', </span>
    <li><span>root: 'persons', </span>
    <li class="alt"><span>successProperty :'success' </span>
    <li><span>}, [ </span>
    <li class="alt"><span>{name: 'id',mapping:'id',type:'<span class="keyword">int</span><span>'}, </span></span>
    <li><span>{name: 'sex',mapping:'sex',type:'string'}, </span>
    <li class="alt"><span>{name: 'name',mapping:'name',type:'string'}, </span>
    <li><span>{name: 'descn',mapping:'descn',type:'string'} //列的映射 </span>
    <li class="alt"><span>]) </span>
    <li><span>}); </span>
    <li class="alt">
    <li>
    <li class="alt"><span><span class="keyword">var</span><span> grid = </span><span class="keyword">new</span><span> Ext.grid.GridPanel({ </span></span>
    <li><span>el: 'grid3', </span>
    <li class="alt"><span>ds: ds, </span>
    <li><span>sm: sm, </span>
    <li class="alt"><span>cm: cm, </span>
    <li><span>width:700, </span>
    <li class="alt"><span>height:280, </span>
    <li><span>bbar: <span class="keyword">new</span><span> Ext.PagingToolbar({ </span></span>
    <li class="alt"><span>pageSize: 10, </span>
    <li><span>store: ds, </span>
    <li class="alt"><span>displayInfo: <span class="keyword">true</span><span>, </span></span>
    <li><span>displayMsg: '显示第 {0} 条到 {1} 条记录，一共 {2} 条', </span>
    <li class="alt"><span>emptyMsg: <span class="string">"没有记录"</span><span> </span></span>
    <li><span>}) //页脚显示分页 </span>
    <li class="alt"><span>}); </span>
    <li><span><span class="comment">//el:指定html元素用于显示grid</span><span> </span></span>
    <li class="alt"><span>grid.render();<span class="comment">//渲染表格</span><span> </span></span>
    <li><span>ds.load({params:{start:0, limit:10}}); //加载数据 </span>
    <li class="alt"><span>}); </span></li>
</ol>
</div>
注意，这里的gridpanel一定要设置高度，否则数据是显示不出来的。<br />
最后启动tomcat，在浏览器里输入http://localhost:8080/extjs/grid3.jsp,就可以看到效果<br />
</span></span></span></span>
<img src ="http://www.blogjava.net/fuhoujun/aggbug/232319.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fuhoujun/" target="_blank">付厚俊</a> 2008-10-04 14:35 <a href="http://www.blogjava.net/fuhoujun/archive/2008/10/04/232319.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ext在线API  http://www.ajaxjs.com/docs/</title><link>http://www.blogjava.net/fuhoujun/archive/2008/10/03/232155.html</link><dc:creator>付厚俊</dc:creator><author>付厚俊</author><pubDate>Thu, 02 Oct 2008 18:22:00 GMT</pubDate><guid>http://www.blogjava.net/fuhoujun/archive/2008/10/03/232155.html</guid><wfw:comment>http://www.blogjava.net/fuhoujun/comments/232155.html</wfw:comment><comments>http://www.blogjava.net/fuhoujun/archive/2008/10/03/232155.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fuhoujun/comments/commentRss/232155.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fuhoujun/services/trackbacks/232155.html</trackback:ping><description><![CDATA[ext在线API&nbsp; http://www.ajaxjs.com/docs/
<img src ="http://www.blogjava.net/fuhoujun/aggbug/232155.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fuhoujun/" target="_blank">付厚俊</a> 2008-10-03 02:22 <a href="http://www.blogjava.net/fuhoujun/archive/2008/10/03/232155.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Panel迟加载的方法(基本解决)</title><link>http://www.blogjava.net/fuhoujun/archive/2008/10/03/232154.html</link><dc:creator>付厚俊</dc:creator><author>付厚俊</author><pubDate>Thu, 02 Oct 2008 18:20:00 GMT</pubDate><guid>http://www.blogjava.net/fuhoujun/archive/2008/10/03/232154.html</guid><wfw:comment>http://www.blogjava.net/fuhoujun/comments/232154.html</wfw:comment><comments>http://www.blogjava.net/fuhoujun/archive/2008/10/03/232154.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fuhoujun/comments/commentRss/232154.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fuhoujun/services/trackbacks/232154.html</trackback:ping><description><![CDATA[store.on('load', function(_store, _records, _options){ <br />
&nbsp;&nbsp;&nbsp; var title = _records[0].get('n_ttitle'); <br />
&nbsp;&nbsp;&nbsp; var content = _records[0].get('n_content'); <br />
&nbsp;&nbsp;&nbsp; p.setTitle(title); <br />
&nbsp;&nbsp;&nbsp; p.html = content; <br />
&nbsp;&nbsp;&nbsp; p.doLayout(); <br />
});
<img src ="http://www.blogjava.net/fuhoujun/aggbug/232154.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fuhoujun/" target="_blank">付厚俊</a> 2008-10-03 02:20 <a href="http://www.blogjava.net/fuhoujun/archive/2008/10/03/232154.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ExtJs + Struts2 + JSON </title><link>http://www.blogjava.net/fuhoujun/archive/2008/10/02/232050.html</link><dc:creator>付厚俊</dc:creator><author>付厚俊</author><pubDate>Wed, 01 Oct 2008 16:37:00 GMT</pubDate><guid>http://www.blogjava.net/fuhoujun/archive/2008/10/02/232050.html</guid><wfw:comment>http://www.blogjava.net/fuhoujun/comments/232050.html</wfw:comment><comments>http://www.blogjava.net/fuhoujun/archive/2008/10/02/232050.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fuhoujun/comments/commentRss/232050.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fuhoujun/services/trackbacks/232050.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &lt;?xml&nbsp;version="1.0"?&gt;&lt;!DOCTYPE&nbsp;hibernate-mapping&nbsp;PUBLIC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"-//Hibernate/Hibernate&nbsp;Mapping&nbsp;DTD&nbsp;3.0//EN"&nbsp;&nbsp;&nbsp;&nbsp;"h...&nbsp;&nbsp;<a href='http://www.blogjava.net/fuhoujun/archive/2008/10/02/232050.html'>阅读全文</a><img src ="http://www.blogjava.net/fuhoujun/aggbug/232050.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fuhoujun/" target="_blank">付厚俊</a> 2008-10-02 00:37 <a href="http://www.blogjava.net/fuhoujun/archive/2008/10/02/232050.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>