MENU

  /   Freemarker instellingen

In MetaFactory kan gebruik worden gemaakt van verschillende template engines. Sinds 2011 ondersteunt MetaFactory Freemarker, een zeer krachtige template engine, waarmee het mogelijk wordt om nog beter bron code te produceren. Net als Velocity biedt ook Freemarker de mogelijkheid om libraries met macro’s te maken om deze macro’s zo beschikbaar te maken voor andere freemarker templates. In het pattern element freemarker kunnen de libraries worden geconfigureerd:

 

<?xml version="1.0" encoding="UTF-8"?>
<pattern xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://www.firstbase.nl/xsd/personaliom/pattern"
         xsi:schemaLocation="http://www.firstbase.nl/xsd/personaliom/pattern
                             http://www.firstbase.nl/xsd/personaliom/pattern.xsd">

  ...
  <freemarker>
    <freemarkerLibrary namespace="myLib1">relative path to freemarker file with macro's</freemarkerLibrary>
    <freemarkerLibrary namespace="myLib2">some other path</freemarkerLibrary>
  </freemarker>
  
  ...
</pattern>

In elk freemarkerLibary element wordt een freemarker file geladen. De macro’s in deze library worden beschikbaar gesteld aan de template engine in de in het namespace attribuut opgegeven namespace. Als het laden niet lukt, dan stopt MetaFactory direct en geeft een foutmelding.

Voorbeeld van het gebruik van het freemarker element in het pattern:

<?xml version="1.0" encoding="UTF-8"?>
<pattern xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://www.firstbase.nl/xsd/personaliom/pattern"
         xsi:schemaLocation="http://www.firstbase.nl/xsd/personaliom/pattern
                             http://www.firstbase.nl/xsd/personaliom/pattern.xsd">

  ...
  <freemarker>
    <freemarkerLibrary namespace="pf">jsf/primefaces/library/primefacesLayout.ftl</freemarkerLibrary>
    <freemarkerLibrary namespace="tl">universal/library/layout/tableLayout.ftl</freemarkerLibrary>
  </freemarker>
  ...
</pattern>

In bovenstaand voorbeeld worden 2 freemarker libraries geladen. De 1e library komt beschikbaar in de namespace pf. De freemarker library primefaces.ftl bevat o.a. een maco createEditWidget_AttributeDateTime. Deze macro kan door andere freemarker templates nu worden aangeroepen dmv de regel:

 

<@pf.createEditWidget_AttributeDateTime param1 param2...paramx />

 

Door middel van het aanleggen van eigen libraries met freemarker (en velocity) macro’s ben je als ontwikkelaar in staat om alle kennis over het maken van een specifiek stukje code vast te leggen. Dit biedt voordelen qua onderhoudbaarheid, qua kennisoverdracht, maar geeft ook de mogelijkheid om goed om te gaan met zogeheten “Voortschrijdend inzicht” => door bijvoorbeeld de code van alle finder methodes van een dao, of alle text velden op een scherm vanuit 1 macro op te bouwen hou je volledige controle over de code. Is er een uitzondering nodig, dan maak je gebruik van een if statement in de macro, waardoor dat specifieke geval net anders wordt. Je ziet dan ook meteen precies waar de uitzonderingen zitten (uiteraard voorzien van duidelijk commentaar). Dat is toch veel makkelijker en overzichtelijker, dan door duizenden regels code te moeten lopen!