Version 5

    Templates are easy to use :

     

    Create a file that is your template, this file contains some html and some special tags

     
    <!-- BEGIN example1 --> 
    <div class="box"> 
    This is an {EXAMPLE} 
    </div> 
    <!-- END example1 --> 
    

     

     

    In the start method of your module create the template object

     
    public void start() 
    { 
    //.... 
    Document doc = repository.loadTemplate("/template.html"); 
    repository.addTemplate("example1", (Element) doc.selectSingleNode("/node/loopname='example1']/node")); 
    Template example1 = repository.createTemplate("example1"); 
    //.... 
    } 
    

     

     

     

    Template and module interact with a DelegateContext object

     
    //.... 
    DelegateContext ctx = new DelegateContext(); 
    ctx.put("EXAMPLE", "example"); 
    //.... 
    

     

     

    Template renders with a writer and the context :

     
    example1.render(ctx, page.getBodyWriter()); 
    
    !You can nest <!-- BEGIN ... --> <!-- END ... --> tags 
    <!-- BEGIN extern --> 
    {EXTERN_VALUE} 
    <!-- BEGIN switch_nested--> 
    {switch_nested.NESTED_VALUE} 
    <!-- END switch_nested --> 
    <!-- END extern --> 
    

     

     

    the contex must be initialised this way :

     
    // .... 
    DelegateContext extern = new DelegateContext(); 
    extern.put("EXTERN_VALUE", "extern value"); 
    DelegateContext nested = extern.next("switch_nested"); 
    nested.put("NESTED_VALUE", "nested value"); 
    // .... 
    

     

     

    It is very usefull when you want to hide or display the nested content because the template system do not render "switch_nested" if you do not call next() on the extern context.

     

    You can implement loops too:

     
    <!-- BEGIN extern --> 
    {EXTERN_VALUE} 
    <!-- BEGIN switch_loop --> 
    {switch_loop.LOOP_VALUE} 
    <!-- END switch_loop --> 
    <!-- END extern --> 
    
    DelegateContext extern = new DelegateContext(); 
    extern.put("EXTERN_VALUE", "extern value"); 
    for (int i = 0; i < 100; i++) 
    { 
    extern.next("switch_loop").put("LOOP_VALUE", new String(i)); 
    }