目錄樹的資料庫設計、java後臺讀取,以及前臺javascript的顯示
—–整理自凋落學長的筆記
我們網站肯定經常用到目錄樹
樹在java web專案中的應用 ,主要是用來儲存目錄。
即這種:
這個 應該是從資料庫查出來的 而不是寫死在頁面上的
如果每一個目錄下 都可以有0-n個目錄 是無限級別的 是儲存在資料庫中的 可維護的
1.資料庫結構設計
那麼 樹形結構如何在關係資料庫中儲存中呢?
一對多 那種儲存子目錄嗎?
這不行 ,因為是無限級別的 ,一對多隻能兩級。那如何儲存不確定的分支數量 和不確定的分支級數。
簡單的來說 ,表結構是這樣的:
有一個根節點 父級id是 0
剩下的所有節點 全部具有父節點 主鍵自增就好了 ,父級id是該級別的上一級
url
即絕對路徑 指從根節點到自己這裡的所有經過的節點名稱 中間用符號隔開
那麼到這裡大家可能想怎麼查詢? 我們可以在java後臺中,查出list 然後再組合
2.java樹結構
那麼java怎麼操作這個玩意兒?
java有List 有Map 有Set
但是沒有tree
所以我們要自定義一個物件
我們這裡可以叫menu物件
這四個屬性確實和 資料庫中的四個列
一一對應了。
但是我們如果僅僅是用List
所以接著寫
每一個Menu物件 有 額外的兩個屬性。
父節點的實體物件 和子節點的Menu物件集合
於是 這就是一個 有父節點 有子節點 的物件
2.2 List《Menu》 轉化成Menu root
我們需要用java程式碼把 parentMenu物件和 set賦值
至於 set基本上就簡單了。大概就是
樹的寬度遍歷方法
先通過遍歷List
大概就是這樣了。
我們就可以得到一個Menu物件
它就是整個選單
技巧:url
為什麼要儲存絕對路徑
你可以用符號分割 大概這樣:
url.split(“/”).length = ?
通過這個長度就可以得到 這是第幾級目錄
最後從資料庫中查出來的Menu物件集合 通過這一整個大保健之後
就變成了一個Menu物件
3. 頁面展示樹
通常我們是把每個目錄包含的連線什麼的做成 文章開頭那樣目錄樹
通過一些js的tree.js這種函式庫
這裡我們為了方便用一個 列表來大概顯示出來這些目錄
<ul></ul>
這樣大家先看著 。然後自己改進
我們在上一步中 直接把 Menu物件轉化為
JSON格式
然後在頁面中使用javascript程式碼解析 json字串
也是 那個遞迴加迴圈的方法
然後通過append生成新的選單列表
<%@taglib prefix="s" uri="/struts-tags" %>
<HTML>
<HEAD>
<script src="js/jquery-1.8.3.js" type="text/javascript"></script>
</HEAD>
<BODY id="0">
<a href="#" onclick="show('<s:property value="json"/>')">啊啊</a>
<script type="text/javascript">
function show(jsonstr){
alert(jsonstr);
var m = eval("("+jsonstr+")");
parseJson(m);
}
function parseJson(json){
$("#" + json.parentID).append("<ul id=" + json.ID + ">" + json.name + "</ul>");
if(json.menuSet.length>0){
$.each(json.menuSet,function(){
parseJson(this);
})
}else{
return;
}
}
</script>
</BODY>
</HTML>
沒有註釋 應該不用寫了吧。。。很簡單的
然後看執行圖
嗯 。大功告成
相關推薦
目錄樹的資料庫設計、java後臺讀取,以及前臺javascript的顯示
—–整理自凋落學長的筆記 我們網站肯定經常用到目錄樹 樹在java web專案中的應用 ,主要是用來儲存目錄。 即這種: 這個 應該是從資料庫查出來的 而不是寫死在頁面上的 如果每一個目錄下 都可以有0-n個目錄 是無限級別的 是儲
在一個千萬級的資料庫查尋中,如何提高查詢效率?分別說出在資料庫設計、SQL語句、java等層面的解決方案
1)資料庫設計方面: a. 對查詢進行優化,應儘量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引。 b. 應儘量避免在 where 子句中對欄位進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃描,如: select id f
java後臺讀取配置文件中key與value -----demo
undle ltm string 文件名 logs 配置 rip conf 返回值 public class ResourcesUtils { /* * @description:根據屬性獲取文件名 * * @param:propertyName文件的
Solr 7.5配置、資料庫連線、Java(學習篇(2)IK分詞器配置)
2、配置IK分詞器 (本人已把需要用到的所有工具、檔案、jar包上傳至百度網盤,有需要者可下載使用, 連結:https://pan.baidu.com/s/1G_L-h0PN2GAaPcreKuuhlg 提取碼:qnwe ) 在ikanalyzer-solr6.5資料夾中找到核心jar包
Solr 7.5配置、資料庫連線、Java(學習篇(1)配置)
需求:基礎Java環境JDK 1.8(solr7.5支援jdk 1.8及以上) Solr 7.5檔案 ikanalyzer-solr6.5分詞器檔案 Sublime Test編輯器 (本人已把需要用到的所有工具、檔案、jar包上傳至百度網盤,有需要者可下載使用, 連結:https://pan
多叉樹的設計、建立、層次優先遍歷和深度優先遍歷
使用者的多叉樹資料儲存在一個檔案中,格式如下: aA 4 g cC z bBbB z 2 f i g 1 d d 3 x e j 每行的第一個元素指定一個節點,第二個元素表示該節點有幾個子節點,緊接著後面跟了幾個子節點; /*
js如何獲取android手機的電話號碼和聯絡人,並且傳遞給PHP、Java後臺
一、使用cordova代替android和iso、xcode的開發和打包 這裡先說說個人站在web的角度對cordova的一些理解:對於獲取手機的一些原生資訊,如呼叫攝像頭、獲取聯絡人,共享地理位置等,我的第一反應就是肯定要用原生的語言去做,如果js指令碼
純div實現tree目錄樹dome例項、加實現邏輯介紹
實現邏輯: / ** *樹結構需要欄位 * 1.樹鍵 * 2.樹值 * 3.點選對應的鍵展示對應的值 *重點
Java檔案讀取,寫入資料庫
/** * 檔案讀寫及資料入庫工具包 */ package com.xxx.file; import java.io.BufferedReader; import java.io.FileReader; import java.io.FileWriter; import
java設計模式之代理模式 ,以及和java 回調機制的區別
-s pac 回調模式 unit 為什麽 創建 col 重要 溫習 java 代理模式就是: 將自己要做的事交給別人去做(這個別人就是代理者,自己就是被代理者),為什麽自己能做的要交給別人去做了?假如一個小學生小明,現在要寫作業,但是又想玩遊戲,他更想玩遊戲
java智能四子棋人機大戰遊戲設計(附項目,以及原創PSD,設計文檔)
給他 直接 發揮 假設 獲得 思路 -- 攔截 格子 本項目是使用java技術+自創“假設下子”算法開發的人機大戰四子棋遊戲客戶端。 具體項目,以及原創PSD,設計文檔,在文件末尾的百度雲連接。 一. 小組說明: 組名:CST 組長:陳飛良(C): 組員:
Java後臺json傳到前臺出現"
情況是這樣的: //將java物件轉成json字串放到session中 String jsonMenu =JSONObject.fromObject(sysMenu).toString(); session.setAttribute("sysMenu",json
Python、Java 薪資最高,C# 墊底:分析什麼程式語言最賺錢!
本文主要用Python爬取拉勾網不同程式語言職位資訊,包括Python崗、Java崗、C++崗、PHP崗、C#崗位(5崗),再用R語言對影響薪資的因素進行分析。由於拉勾網的職位資訊只顯示30頁,一頁15個職位資訊,如果單獨爬取一個城市的崗位資訊,只有幾頁是匹配的資訊,資訊量太小,分析沒有說服力。因此,本文爬取
java構造方法,以及super、this關鍵字、隱式呼叫、顯式呼叫
首先需要明白的是,當建立java物件時,程式總是依次呼叫每個父類的非靜態初始化塊、父類構造器(總是從Object開始)執行初始化,最後才呼叫該類的非靜態初始化塊、構造器執行初始化。 為了說明問題,這裡貼出一個小例子: class Parent{static{System.
java 檔案讀取,一行一行的讀取
public static void main(String[] args) throws IOException { File file = new File("c:/error.txt");
java後臺傳遞json到前臺 中文亂碼解決方法
查了兩天 都說處理response 不過我搭建的框架裡沒有response(至少表面上沒有) 然後拼接了一個String作為json傳遞到前臺 但是遇到中文 前臺就顯示“?” 試過很多辦法 都不能解決 最後放棄了字串拼接 改為物件傳遞 結果成功了 controller對應方
碼不停蹄(六):從零開始Java後臺開發,跳出寫Servlet+JDBC的坑,使用輕量級框架Spring+SpringMVC+MyBatis (SSM)
寫在前面:這篇文章是寫給剛剛接觸或者準備學習web/APP應用開發的同學的,分享我的後臺開發經驗,如果你對後臺開發沒有什麼概念,甚至剛剛學完Java的基礎語法,那麼請一定要仔細看我接下來提供的開發方案,這會幫你跳出很多坑,迅速找到入門後臺開發的路。 一、學點底
java 流讀取圖片供前臺顯示
jsp階段<img id="img" src="${ctx }/phone/getImg.ce?type=2&PATHID='+pathid+'"> </img>java
用Python群發郵件,含附件、excel內容讀取,收件人列表讀取等
11月13日更新:把所有部分函式化 環境:Python 3.6 from openpyxl import load_workbook #excel import datetime from smtplib import SMTP #郵件 from time im
Base64 JAVA後臺編碼與JS前臺解碼(解決中文亂碼問題)
中文通過Java後臺進行Base64編碼後傳到前臺,通過JS進行Base64解碼時會出現中文亂碼的問題,被這個問題也是困擾了幾天,使用jquery.base64.js只能轉碼非中文字元,經過蒐集各種方案,最終找到適合自己的解決方案。 Java後臺編碼,這裡用的是org.ap