extjs4 Accordion布局

项目结构:

实现效果:

index.jsp代码:

<%@ page language="java" pageEncoding="UTF-8"%>
<html>
	<head>

		<title>Accordion布局菜单</title>
		<link rel="stylesheet" type="text/css"
			href="/Accordion/ext4/resources/css/ext-all.css" />
		<script type="text/javascript" src="/Accordion/ext4/ext-all-debug.js"></script>
		<script type="text/javascript" src="/Accordion/ext4/locale/ext-lang-zh_CN.js"></script>
		<style type="text/css">
			.icon-accordion{
				background-image: url(/Accordion/images/accordion.gif) !important;
			}
			.icon-panel{
				background-image: url(/Accordion/images/panel.png) !important;
			}
		</style>
		<script type="text/javascript">
		var ajax = function(config) { //封装、简化AJAX
			Ext.Ajax.request({
				url : config.url, //请求地址
				params : config.params, //请求参数
				method : 'post', //方法
				callback : function(options, success, response) {
					config.callback(Ext.JSON.decode(response.responseText));
					//调用回调函数
				}
			});
			return false;
		};
		Ext.onReady(function() {
			var win = Ext.create("Ext.window.Window", {
				title : "Accordion布局动态菜单",
				width : 300,
				height : 500,
				iconCls : "icon-accordion",
				autoScroll : false,
				layout : 'accordion',
				layoutConfig : {
					animate : true
				}
			});
			win.show();
			ajax({
				url : "/Accordion/accordion",//获取面板的地址
				params : {
					action : "list"
				},
				callback : addTree
			});
			function addTree(data){
				for ( var i = 0; i < data.length; i++) {
					win.add(Ext.create("Ext.tree.Panel", {
						title : data[i].title,
						iconCls : data[i].iconCls,
						autoScroll : true,
						rootVisible : false,
						viewConfig : {
							loadingText : "正在加载..."
						},
						store : createStore(data[i].id),
						listeners : {
							afterlayout : function(){
								if(this.getView().el){
									var el = this.getView().el;
									var table = el.down("table.x-grid-table");
									if(table){
										table.setWidth(el.getWidth());
									}
								}
							}
						}
					}));
					win.doLayout();
					
				}
			}
			var model = Ext.define("TreeModel", { //定义树节点数据模型
				extend : "Ext.data.Model",
				fields : [ {name : "id",type : "string"},
				           {name : "text",type : "string"}, 
				           {name : "iconCls",type : "string"}, 
				           {name : "leaf",type : "boolean"} 
				         ]
			});
		   var createStore  =  function(id){ //创建树面板数据源
			   var me = this;
			   return Ext.create("Ext.data.TreeStore",{
				   defaultRootId : id, //默认的根节点id
				   model : model,
				   proxy : {
					   type : "ajax", //获取方式
					   url : "/Accordion/accordion?action=node" //获取树节点的地址
				   },
				   clearOnLoad : true,
				   nodeParam : "id"//设置传递给后台的参数名,值是树节点的id属性
			   });
		   };
		});
</script>
	</head>
	<body>
	</body>
</html>



AccordionServlet代码如下:

package servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

@SuppressWarnings("serial")
public class AccordionServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String action = request.getParameter("action");
		initHeader(response);
		if(action.equals("list")){//获取属面板列表
			renderText(this.getTreePanelList(), response);
		}else if(action.equals("node")){
			renderText(this.getTreeNodeList(request.getParameter("id")), response);
		}
	}
	
	public String getTreeNodeList(String id){
		JSONArray array = new JSONArray();
		for (int j = 0; j < 5; j++) {
			JSONObject json = new JSONObject();
			json.element("id", id + "-" +(j+1));
			json.element("text", "树节点-"+ id + "-" +(j+1));
			if((j+1) % 2 == 0 && id.length() <= 3){
				json.element("leaf", false);
			}else{
				json.element("leaf", true);
			}
			array.add(json);
		}
		return array.toString();
	}
	
	public String getTreePanelList(){
		JSONArray array = new JSONArray();
		for (int i = 0; i < 5; i++) { //生成5个属面板
			JSONObject json = new JSONObject();
			json.element("id", i+1);
			json.element("iconCls", "icon-panel");
			json.element("title", "Accordion菜单"+(i+1));
			array.add(json);
		}
		return array.toString();
	}
	
	public static void renderText(final String content,HttpServletResponse response){
		try{
			response = initHeader(response);
			response.getWriter().write(content);
			response.getWriter().close();
		}catch(Exception e){
			e.printStackTrace();
		}
	}

	
	private static HttpServletResponse initHeader(HttpServletResponse response){
		response.setHeader("Pragma", "No-cache");
		response.setHeader("Cache-Control", "no-cache");
		response.setDateHeader("Expires", 0);
		response.setCharacterEncoding("UTF-8");
		return response;
	}
}

web.xml代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
  <display-name></display-name>
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>AccordionServlet</servlet-name>
    <servlet-class>servlet.AccordionServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>AccordionServlet</servlet-name>
    <url-pattern>/accordion</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>









转载于:https://my.oschina.net/zhongwenhao/blog/215494

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值