[j2ee] visuele tree opbouwen

Pagina: 1
Acties:

  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

Topicstarter
In een webapplicatie, die gebruik maakt van verschillende technologieën (jsp, struts, hibernate en een mysql db), wil ik een visuele tree implementeren.

Deze tree zou dan een logische folderstructuur moeten weergeven, gebaseerd op de data beschikbaar in de database.

Mijn voorlopige tabellen, betrekking op deze functionaliteit, zien er als volgt uit:

TABELLEN
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
+ ---------------- +
| DOCUMENT         |
+ ---------------- +
| docID (pk)       |
| name             |
| ...              |
| folderID (fk)    |
+ ---------------- +


+ ---------------- +
| FOLDERCONTENT    |
+ ---------------- +
| folderID         |
| docID            |
+ ---------------- +


+ ---------------- +
| FOLDER           |
+ ---------------- +
| folderID (pk)    |
| name             |
| ...              |
| parent_ID        |
+ ---------------- +


RELATIES
code:
1
DOCUMENT --< FolderContent >-- FOLDER



Op deze database informatie zou ik dan een visuele tree, een soort van "windows verkenner", willen opbouwen.

Dit kan natuurlijk op verschillende manieren: javascript, struts-layout, server-side.
Al denk ik niet dat server-side de ideale manier is, aangezien de webapplicatie door verschillende gebruikers gebruikt zal worden en daardoor veel load naar de server met zich zal meebrengen. Al heb je dat met gewone javascript ook wel, aangezien bij elke request de juiste informatie uit de db zal moeten worden opgehaald.

Nu weet ik niet wat de juiste manier van aanpak is. Misschien dat er al personen zijn, die reeds dergelijk systeem hebben gebouwd.

Alle commentaar, informatie, voorbeelden, code-snippets én last but not least.. goede ideeën zijn welkom! :Y)

  • JaQ
  • Registratie: Juni 2001
  • Nu online

JaQ

Nog niet lang geleden (lees < 2 weken) heb ik dit zelf gemaakt voor de jsp /stuts / adf / oracle combi (bijna hetzelfde dus ;) )

Ik heb het geheel in een tabel gezet met een recursieve n:n relatie. (dus 1 tabel met objecten, 1 tabel met object_relaties die bestaat uit: parent_object_id, object_id). De hele tree werkt m.b.v. javascript. Ik bouw dus vanuit JSP een stukje javascript dat de waarden van de tree aan het javascript meegeeft.

Voorbeelden van dit soort tree's kan je plenty vinden op de verschillende script sites (zo ben ik er ook aan gekomen ;) ). Zou moeten lukken dus.

Suck6 ;)

Egoist: A person of low taste, more interested in themselves than in me


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Naar aanleiding van je topic op javahova:

http://forum.javahova.net/topic.php?id=1158

  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

Topicstarter
Hoe had je dit in gedachten? Je wilt een javascript functie contact laten opnemen met de server, een klein stukje boom terug laten struren en dat in je dom prikken? Lijkt me een vrij lastige zaak.
Ja, dat was m'n eerste gedachte.. maar ik realiseerde mij ook vrijwel onmiddellijk dat dit eigenlijk niet haalbaar was..
Je moet met 1 ding rekening houden: 10 keer 1 klein verzoekje is veel en veel langzamer dan 1 keer een dik verzoek. Je kunt dus veel beter in 1 request een groot deel afhandelen zodat je niet onnodig netwerk verkeer loopt te veroorzaken. Zoek anders een naar 'value object' om de performance tussen client en server op te peppen. Het value object wordt om deze reden (dus 1xdik verzoek sneller dan 10 xklein verzoek) toegepast.

Verder kun je natuurlijk ook gaan cachen. Je bouw een of ander misschien wel dure html pagina, maar die pagina mag gecached blijven zolang er niets in die boom verandert. Als er niets is verandert kan je gewoon die pagina terug struren.
Cachen, zou eventueel wel gaan ja.. al heb ik daar niet zo'n goede ervaringen mee gehad in het verleden.
Ik neem aan dat iedereen wel dynamisch trees heeft opgezet, maar jij bedoelt 1 in html?

Check mijn site maar eens:
www.alarmnummer.net

Kijk maar eens bij handige projecten. Daar zit ook een tree in die je kan openklappen. Je kunt in principe je boom net zo groot en diep maken als je wilt. Je kunt het script van me wel krijgen kan je het copieren/aanpassen naar wens.
Nog veel notready ;)
Maar zoiets zou het inderdaad ook kunnen worden.

Er zijn dus veel mogelijkheden, maar de tree opbouwen vanuit een database lijkt me lastig (In het achterhoofd houden dat er een manager/administrator een folder aan het toevoegen is ed, of een user een nieuwe file aan het uploaden in zijn homedir).
Ik lig een beetje in de knoop hiermee.. 'k weet niet wat het beste is, hoe aan te pakken, ...

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Misschien een ideetje:

Je maakt een pagina die de tree data ophaalt van de server. Deze toon je volledig met clientside script.

Ieder klik (openen van een node etc) submit je een form naar een hidden frame, die aan de server vraagt of er iets verandert is sinds de laatste keer dat je de server raadpleegde (gewoon middels een datumveldje). Zolang dat niet het geval is, refresh je de pagina met de data niet.

Dit genereert een minimale hoeveelheid serverload, tenminste indien er niet continue zaken veranderen aan de serverkant.

  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

Topicstarter
Iemand bekend met struts-layout?
Daarmee zou het eventueel dus ook mogelijk zijn om een tree op te bouwen (server-side). En als de tree groot wordt, dan gaat hij alleen met de topnodes renderen, en daarna pas verder...

Ik weet niet ofdat dit een goede oplossing blijkt te zijn? iemand ervaringen... ?

  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Hallo...

Wilde even melden dat ik zojuist begonnen ben met exact hetzelfde. Zit ook met dezelfde problemen, lijkt me. Ik ben net begonnen in JavaScript het een en ander te proberen. Wilde eigenlijk in eerste instantie kijken of ik de boel statisch in HTML/JScript voor elkaar kan krijgen, om het vervolgens vanuit PHP te voeden. Maar - zoals gewoonlijk - loop ik alweer snel in JavaScript vast. De meest voorname functies ontbreken altijd :'( .

Zo ben ik nu bezig een 'is_object()' functie ala PHP te maken ... maar daar gaat het alweer mis. Overigens staat op http://www.treemenu.net/ een mooi voorbeeld van wat we willen hebben ... alleen mag die weer commercieel niet gebruikt worden en is de JavaScript code erg lastig leesbaar. Daardoor is het (althans voor mij) moeilijk om het dynamische element er in te bouwen.

Ik kan dus helaas weinig bijdragen ...

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

http://www.alarmnummer.net/tree.zip

zit zelfs nog een ant-script bij! Je moet het zelf wel even uitzoeken want ik heb het gewoon uit mijn site gesnaaid.

  • Peetman
  • Registratie: Oktober 2001
  • Nu online

Peetman

Tjah....

Ik heb net ook een stukje code ontwikkeld om dit voor elkaar te krijgen in J2ee.

Wat ik doe is het volgende:
- Ik haal vanuit de database een recordset op met de volgende gegevens:
code:
1
2
3
CategoryID
CategoryName
ParentCategoryID

Deze recordset is gesorteerd op ParentCategoryID. Als je dan door de recordset heenloopt kan je recursief de children te pakken krijgen. zie deze pagina

- Ik bouw aan de hand hiervan weer een xml-tje op met de juiste gegevens/structuur

- Deze xml wordt met een xsl transformatie naar de juiste html vertaald (met ul/li)

  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

Topicstarter
Alarmnummer schreef op 06 mei 2004 @ 17:48:
http://www.alarmnummer.net/tree.zip

zit zelfs nog een ant-script bij! Je moet het zelf wel even uitzoeken want ik heb het gewoon uit mijn site gesnaaid.
Thanks, ik zal het eens bekijken..

Ken je trouwens struts-layout, of heb je hier ervaring mee?

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

-FoX- schreef op 08 mei 2004 @ 09:36:
Ken je trouwens struts-layout, of heb je hier ervaring mee?
Struts ken ik wel, maar struts layout niet.

  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

Topicstarter
Is een taglib voor Struts die ook een soortgelijke tree ondersteund. Link staat iets meer bovenaan in dit topic :)
Pagina: 1