亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java的Struts2框架配合Ext JS處理JSON數(shù)據(jù)的使用示例

 更新時間:2016年03月03日 09:39:57   作者:云自無心水自閑  
這篇文章主要介紹了Java的Struts2框架配合Ext JS處理JSON數(shù)據(jù)的使用示例,包括將Ext JS中的JSON數(shù)據(jù)解析為列表的方法,需要的朋友可以參考下

最近嘗試用extjs來展示樹狀菜單。著實花了一番功夫。樹狀菜單的菜單項需要動態(tài)加載,而目前版本的extjs中只支持JSON格式的數(shù)據(jù)。查了一些資 料,決定使用struts2的json-plugin。首先按照例子做了一個,但是結(jié)果就是不成功,界面上只出來了一個js中生成的root節(jié)點,不能加 載從后臺生成的數(shù)據(jù)。研究后發(fā)現(xiàn)是數(shù)據(jù)格式有問題。使用json-plugin生成的數(shù)據(jù)格式如下:

{"cls":"folder","id":10,"leaf":false,"children":[{"cls":"file","id":11,"leaf":true,"children":null,"text":"S600"},{"cls":"file","id":12,"leaf":true,"children":null,"text":"SLK200"}],"text":"Benz"}

而extjs需要的數(shù)據(jù)格式如下:

[{"cls":"folder","id":10,"leaf":false,"children":[{"cls":"file","id":11,"leaf":true,"children":null,"text":"S600"},{"cls":"file","id":12,"leaf":true,"children":null,"text":"SLK200"}],"text":"Benz"}]

區(qū)別很小,就只相差最外面的兩個方括號。但是少了這兩個方括號,在json中,含義迥然不同,前者表示一個對象,而后者表示一個數(shù)組。而extjs中 tree的dataloader需要的數(shù)據(jù)必須是一個數(shù)組。而這樣的數(shù)據(jù)格式是json-plugin自動生成的,無法改變。所以,我最后放棄了json -plugin,轉(zhuǎn)而使用json-lib來解決這個問題。
1. 下載json-lib, http://json-lib.sourceforge.net/
2. lib目錄下的jar文件清單:
commons-beanutils-1.7.0.jar
commons-collections-3.2.jar
commons-digester-1.6.jar
commons-lang-2.3.jar
commons-logging-1.1.jar
dom4j-1.6.1.jar
ezmorph-1.0.4.jar
freemarker-2.3.8.jar
javassist-3.8.1.jar
json-lib-2.2.1-jdk15.jar
log4j-1.2.13.jar
ognl-2.6.11.jar
struts2-core-2.0.11.jar
xml-apis-1.0.b2.jar
xwork-2.0.4.jar


首先配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
 http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
 <welcome-file-list>
 <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>
 <filter>
 <filter-name>struts2</filter-name>
 <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
 </filter>

 <filter-mapping>
 <filter-name>struts2</filter-name>
 <url-pattern>/*</url-pattern>
 </filter-mapping>
</web-app>

然后是struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
 "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
 "http://struts.apache.org/dtds/struts-2.0.dtd">
 
<struts>
 <constant name="struts.devMode" value="true"/>
 <constant name="struts.i18n.encoding" value="UTF-8"/>
 <package name="person" extends="struts-default">
 <action name="menus" method="execute" class="com.lab.MenuAction">
  <result>/menu.jsp</result>
 </action>
 </package>
</struts>

3. 樹的節(jié)點模型(省略了getter,setter)

public class Menu {
 private int id;
 private String text;
 private boolean leaf;
 private String cls;
 private List<Menu> children;
}

4. action

package com.lab;

import java.util.ArrayList;
import java.util.List;

import net.sf.json.JSONArray;

public class MenuAction {
 private String menuString;
 
 private List<Menu> menus;
 
 public String execute() {

 menus = new ArrayList<Menu>();
 
 Menu benz = new Menu();
 benz.setText("Benz");
 benz.setCls("folder");
 benz.setLeaf(false);
 benz.setId(10);
 menus.add(benz);
 
 List<Menu> benzList = new ArrayList<Menu>();
 benz.setChildren(benzList);
 
 Menu menu;
 menu = new Menu();
 menu.setText("S600");
 menu.setCls("file");
 menu.setLeaf(true);
 menu.setId(11);
 benzList.add(menu);
 menu = new Menu();
 menu.setText("SLK200");
 menu.setCls("file");
 menu.setLeaf(true);
 menu.setId(12);
 benzList.add(menu);
 
 Menu bmw = new Menu();
 bmw.setText("BMW");
 bmw.setCls("folder");
 bmw.setLeaf(false);
 bmw.setId(20);
 menus.add(bmw);
 
 List<Menu> bmwList = new ArrayList<Menu>();
 bmw.setChildren(bmwList);
 
 menu = new Menu();
 menu.setText("325i");
 menu.setCls("file");
 menu.setLeaf(true);
 menu.setId(21);
 bmwList.add(menu);
 
 menu = new Menu();
 menu.setText("X5");
 menu.setCls("file");
 menu.setLeaf(true);
 menu.setId(22);
 bmwList.add(menu);
 
 JSONArray jsonObject = JSONArray.fromObject(menus);
 try {
  menuString = jsonObject.toString();
 } catch (Exception e) {
  menuString = "ss";
 }

 return "success";
 }

 public String getMenuString() {
 return menuString;
 }

 public void setMenuString(String menuString) {
 this.menuString = menuString;
 }
}

5. menu.jsp

<%@ taglib prefix="s" uri="/struts-tags" %>
<s:property value="menuString" escape="false"/>

6. html頁面和js
我使用的就是extjs的example中的reorder.html和reorder.js,更改了reorder.js中treeloader的dataurl: menus.action

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Reorder TreePanel</title>
<link rel="stylesheet" type="text/css" href="extjs/resources/css/ext-all.css" />

 <!-- GC -->
 <!-- LIBS -->
 <script type="text/javascript" src="extjs/adapter/ext/ext-base.js"></script>
 <!-- ENDLIBS -->
 
 <script type="text/javascript" src="extjs/ext-all.js"></script>
<script type="text/javascript" src="reorder.js"></script>

<!-- Common Styles for the examples -->
<link rel="stylesheet" type="text/css" href="extjs/resources/css/example.css" />
</head>
<body>
<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
<h1>Drag and Drop ordering in a TreePanel</h1>
<p>This example shows basic drag and drop node moving in a tree. In this implementation there are no restrictions and 
anything can be dropped anywhere except appending to nodes marked &quot;leaf&quot; (the files). <br></p>
<p>Drag along the edge of the tree to trigger auto scrolling while performing a drag and drop.</p>
<p>In order to demonstrate drag and drop insertion points, sorting was <b>not</b> enabled.</p>
<p>The data for this tree is asynchronously loaded with a JSON TreeLoader.</p>
<p>The js is not minified so it is readable. See <a href="reorder.js">reorder.js</a>.</p>

<div id="tree-div" style="overflow:auto; height:300px;width:250px;border:1px solid #c3daf9;"></div>

</body>
</html>

js:

/*
 * Ext JS Library 2.0.1
 * Copyright(c) 2006-2008, Ext JS, LLC.
 * licensing@extjs.com
 *
 * http://extjs.com/license
 */

Ext.onReady(function(){
 // shorthand
 var Tree = Ext.tree;
 
 var tree = new Tree.TreePanel({
 el:'tree-div',
 autoScroll:true,
 animate:true,
 enableDD:true,
 containerScroll: true,
 loader: new Tree.TreeLoader({
  dataUrl:'http://localhost:8080/lab/menus.action'
 })
 });

 // set the root node
 var root = new Tree.AsyncTreeNode({
 text: 'Ext JS',
 draggable:false,
 id:'source'
 });
 tree.setRootNode(root);

 // render the tree
 tree.render();
 root.expand();
});

7.解析為List數(shù)據(jù)
代碼如下:
EXTJS中的json數(shù)據(jù)

var comboStore = new Ext.data.Store({ 
 proxy: new Ext.data.HttpProxy({ 
   url:'adminGroup', //這里是struts請求到action 
   method:'POST' //請求方式 
  }), 
 reader: new Ext.data.JsonReader({  
  //總記錄數(shù) 
   totalProperty: 'results', //總記錄數(shù) 
   root: 'items', //記錄集合 
   id:'roleId' 
  }, 
  ['roleId','roleName'] //顯示的兩個字段 
  ) 
 }); 

          
JSON數(shù)據(jù)內(nèi)容

{"items":[{"password":"ahui","adminId":1,"role":{"roleName":"系統(tǒng)管理員","roleId":2,"sequence":"2","admin":null,"logoutMark":"否"},"adminName":"ahui","logout":"否"},
 {"password":"xiao","adminId":2,"role":{"roleName":"系統(tǒng)管理員","roleId":2,"sequence":"2","admin":null,"logoutMark":"否"},"adminName":"xiao","logout":"是"},"results":13}

 
 
下面是struts2里面的action代碼 里面封裝了ExtHelper工具類,里面有轉(zhuǎn)換xml和json兩種格式

public String findAll() throws Exception{ 
 
  HttpServletRequest request = ServletActionContext.getRequest(); 
 
  HttpServletResponse response = ServletActionContext.getResponse(); 
 
  List list = groupService.getGroup(); //調(diào)用service里面的方法,把所有的數(shù)據(jù)都查詢出來 
 
  String json = ExtHelper.getJsonFromList(list);//把list轉(zhuǎn)換為json格式的數(shù)據(jù) 
 
  response.setContentType("text/json;charset=UTF-8");//設(shè)置數(shù)據(jù)到前臺顯示的字符編碼,如果不轉(zhuǎn)會有亂碼 
 
  response.getWriter().write(json); 
 
  System.out.println(json); 
 
  return null; 
} 

解析json的方法有很多,所以是怎么方便怎么來,json自己的包里也可以進行轉(zhuǎn)換,但如果項目中用的是Struts2,直接用Struts2提供的方法更方便。

相關(guān)文章

  • tk.mybatis如何擴展自己的通用mapper

    tk.mybatis如何擴展自己的通用mapper

    這篇文章主要介紹了tk.mybatis如何擴展自己的通用mapper操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 通過實踐了解如何處理Java異常

    通過實踐了解如何處理Java異常

    Java中的異常處理不是一個簡單的主題。初學(xué)者發(fā)現(xiàn)它很難理解,甚至有經(jīng)驗的開發(fā)者也可以花幾個小時討論如何以及應(yīng)該拋出或處理哪些異常。下面我們通過實踐來了解如何解決異常
    2019-05-05
  • Java中的關(guān)鍵字_動力節(jié)點Java學(xué)院整理

    Java中的關(guān)鍵字_動力節(jié)點Java學(xué)院整理

    關(guān)鍵字也稱為保留字,是指Java語言中規(guī)定了特定含義的標(biāo)示符。對于保留字,用戶只能按照系統(tǒng)規(guī)定的方式使用,不能自行定義
    2017-04-04
  • 詳解@Autowired(required=false)注入注意的問題

    詳解@Autowired(required=false)注入注意的問題

    這篇文章主要介紹了@Autowired(required=false)注入注意的問題,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • java Unicode和UTF-8之間轉(zhuǎn)換實例

    java Unicode和UTF-8之間轉(zhuǎn)換實例

    這篇文章主要介紹了java Unicode和UTF-8之間轉(zhuǎn)換實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Java中HashMap和Hashtable及HashSet的區(qū)別

    Java中HashMap和Hashtable及HashSet的區(qū)別

    以下是對Java中HashMap和Hashtable及HashSet的區(qū)別進行了詳細的分析介紹,需要的朋友可以過來參考下
    2013-09-09
  • Spring boot從安裝到交互功能實現(xiàn)零基礎(chǔ)全程詳解

    Spring boot從安裝到交互功能實現(xiàn)零基礎(chǔ)全程詳解

    這篇文章主要介紹了Spring boot從安裝到交互功能得實現(xiàn)全程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • java字符串抉擇

    java字符串抉擇

    下面給大家解析字符串連接方面的知識,包括string,stringbuffer和stringbuilder等方面的知識,對java字符串知識感興趣的朋友一起學(xué)習(xí)吧
    2016-12-12
  • Java HashMap兩種簡便排序方法解析

    Java HashMap兩種簡便排序方法解析

    這篇文章主要介紹了Java HashMap兩種簡便排序方法解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • Java四位電話號碼的加密方法

    Java四位電話號碼的加密方法

    這篇文章主要為大家詳細介紹了Java四位電話號碼的加密方法,數(shù)據(jù)是四位的整數(shù),在傳遞過程中進行加密,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07

最新評論