Archief - [PROG]JAVA Template Framework

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

$kullrider

Legacy Member
Hoi,

Ik ben op zoek naar een template framework waarbij ik een POJO kan omzetten naar een XML-bestand. Het aanmaken van de template moet zo eenvoudig mogelijk zijn (liefst GUI-based, zodat niet-programmeurs er ook mee kunnen werken).

Voor het XML bestand moet het echter ook mogelijk zijn om zelf alle tags te definieren in de template. Dus dat je bijvoorbeeld kan zeggen dat het uiteindelijk xml-bestand er zo zal moeten uitzien:

<root>
<someInfo>Info</someInfo>
</root>

Met als Info dan de waarde van een variabele uit men POJO.
Ik heb eerst JasperReports getest omdat deze dit normaal zou moeten kunnen. Maar jasperReports gaat zelf al die tags genereren en een naam geven. (Toch voor zover ik het programma snap).

Kan er iemand mij een ander framework aanraden waarmee dit wel mogelijk is.
Of misschien is dit toch mogelijk met JasperReports, maar dan zou ik graag weten hoe. :)

Als men vraag niet duidelijk genoeg is zeg je het maar, dan zal ik het wat duidelijker proberen te formuleren :woohoo:

Thx, Sven

Ice

Legacy Member
Je zoekt dus een framework dat POJO's omzet naar xml en je moet zelf de tags kunnen definieren en wat er in een tag komt?

$kullrider

Legacy Member
Het is dus de bedoeling dat de .xml er deels uitziet als hieronder.

De tag names en attribute names wil ik bepalen in men template.
De value's van de element nodes en de attribute nodes wil ik ofwel ook reeds bepalen in de template, ofwel uit men POJO halen.

<root>
<Line>
<col1 justify="right" width="4">Aant</col1>
<col2 allowoverflow="true" truncate="true" justify="left" width="22">Omschrijving</col2>
<col3 allownewline="true" justify="right" width="7">Prijs</col3>
<col4 justify="right" width="10">Waarde</col4>
<col5 justify="right" width="3" />
</Line>
</root>

Dus dat je in je template een soort skelet kan definieren, met dan bepaalde waardes nog niet ingevuld die uit je POJO komen.

Bavo aka Joske

Legacy Member
Velocity. http://velocity.apache.org/engine/index.html

The Apache Velocity Engine is a free open-source templating engine.

Velocity permits you to use a simple yet powerful template language to reference objects defined in Java code. It is written in 100% pure Java and can be easily embedded into your own applications. The engine is the core of the Apache Velocity Project .

Dan doe je

Code:
        Writer writer = new StringWriter(1024);

    	Context context = new VelocityContext();
    	MyBean bean = //.. create, update bean
    	
        context.put("bean",bean);
        try
        {
            Velocity.mergeTemplate("templates/mytemplate.tmpl", RuntimeConstants.ENCODING_DEFAULT, context, writer);
        } catch (Exception e)
        {
            log.error("Exception caught during velocity merge: ", e);
        }
    	pane.setText(writer.toString());

met een template file zoals

Code:
TEST=$bean.property
blabla

$kullrider

Legacy Member
Bedankt, ik zal velocity morgen testen en dan men bevindingen hier posten.

Bavo aka Joske

Legacy Member
Kan zijn dat je wat moet knoeien om het juist te krijgen, want Velocity heeft een syntax op zijn eigen om if/else strcutureren te maken, te itereren etc.

We hebben het ooit gebruikt als JSP taal op een Spring MVC layer. Maar om te zeggen :) Beste gebruik vind ik nu in het project waar het dient om lange tekst messages in te vullen met variabelen uit Java objecten, zoals jij vroeg. Kan ook makkelijk gebruikt worden voor personalised mass mails.

$kullrider

Legacy Member
Het ziet er een degelijk prog uit en het zou mss wel eens kunnen werken.
Enige probleem is dat het me niet lukt om de template te laden in java. :s
Men .vm bestand staat in men classpath, en als ik ernaar zoek met getClass().getResource(file.vm) vindt hij hem.
Velocity heeft echter een error: Unable to find resource file.vm'

EDIT: prob opgelost, blijkbaar moet je het hele pad meegeven vanaf src/.../file.vm

$kullrider

Legacy Member
Na een weekje testen blijkt velocity goed te werken voor het doel dat ik voor ogen had.
Ik heb echter nog een beter framework gevonden dat eigenlijk voortkomt uit velocity maar enkele van zijn tekortkomingen heeft weggewerkt: FreeMarker.

Alleszinds bedankt voor de hulp :)
Sven

Bavo aka Joske

Legacy Member
Welke tekortkomingen exact? Ze lijken hetzelfde te doen, terwijl FreeMarker wel een voordeel heeft als je HTML wilt genereren dakzij zijn HTML syntax (je kan sourcefiles files viewen als HTML zonder garble).

Ik zie niet meteen een ander voordeel, en niet in uw context. Vertel!

$kullrider

Legacy Member
- De formatering van getallen. Bij velocity moet dat bij elk getal gebeuren, bij freemarker kun je dit instellen voor een volledige template. Er zijn trouwens een heleboel dingen die in te stellen zijn voor een volledige template dankzij het Configuration object. Dit bespaart veel werk bij wijzigingen :-)
- De syntax van freemarker is ook groter, dus meer mogelijkheden. Bv attempt/recover is een soort van try/catch. Volgens mij heeft velocity dit niet.
- Er is een plugin voor eclipse waardoor je syntax highlighting, error detection, ... hebt, wat het maken van templates serieus vereenvoudigt.
-Als een variabele niet gevonden wordt zal hij een error geven ipv de aanroep naar die variabele weer te geven zoals hij in de template staat.

En ik denk dat er nog wel een paar zijn ^^
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan