Facelets

Facelets
Stabil frisättning
2.0 / 28 juni 2009 ( 2009-06-28 )
Skrivet i Java
Operativ system Cross-plattform
Typ Webbmallssystem
Hemsida facelets .dev .java .net  Edit this on Wikidata
Facelets fristående
Stabil frisättning
1.1.15 / 24 november 2009 ( 2009-11-24 )
Förhandsgranska release
1.2-dev / 10 november 2006 ( 2006-11-10 )
Skrivet i Java
Operativ system Cross-plattform
Storlek 5,07 MB (arkiverad)
Typ Webbmallssystem
Licens Apache-licens 2.0
Hemsida facelets .java .net

Inom datoranvändning är Facelets ett webbmallsystem med öppen källkod under Apache-licensen och standardvisningstekniken (alias visningsdeklarationsspråk) för Jakarta Server Faces (JSF; tidigare JavaServer Faces ). Språket kräver giltiga XML- indatadokument för att fungera. Facelets stöder alla JSF UI-komponenter och fokuserar helt på att bygga JSF-komponentträdet, vilket återspeglar synen för en JSF-applikation.

Även om både JSP- och JSF -teknologier har förbättrats för att fungera bättre tillsammans, eliminerar Facelets de problem som noteras i Hans Bergstens artikel "Improving JSF by Dumping JSP"

Facelets bygger på några av idéerna från Apache Tapestry och är tillräckligt lika för att göra jämförelser. Projektet liknar konceptuellt Tapestrys, som behandlar block av HTML-element som ramkomponenter som backas upp av Java-klasser. Facelets har också vissa likheter med Apache Tiles -ramverket med avseende på stöd för mall såväl som komposition.

Facelets skapades ursprungligen av Jacob Hookom 2005 som ett separat, alternativt vydeklarationsspråk för JSF 1.1 och JSF 1.2 som båda använde JSP som standardspråk för visningsdeklaration. Från och med JSF 2.0 har Facelets marknadsförts av JSF-expertgruppen till att vara standardspråket för visningsdeklaration. JSP har fasats ut som ett äldre fall tillbaka.

Elementkonvertering

I Facelets kan malltaggar från ett taggbibliotek anges i två former: direkt som ett kvalificerat xml- element eller indirekt via jsfc- attributet på ett godtyckligt icke-kvalificerat element. I det senare fallet kommer Facelet-kompilatorn att ignorera det faktiska elementet och kommer att bearbeta elementet som om det var det som gavs av jsfc- attributet .

Följande exempel visar direkt användning av kvalificerade taggar:



  
    
        
               
              
                
        
    
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0  Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  <html  xmlns=  "http ://www.w3.org/1999/xhtml"  xmlns:h=  "http://java.sun.com/jsf/html"  >  <body>  <h:form>  <h:outputText  value=  "Välkommen, #{loggedInUser.name}"  disabled=  "#{tom logdInUser}"  />  <h:inputText  value=  "#{bean.property}"  />  <h:commandButton  value=  "OK"  action=  "#{bean. doSomething}"  />  </h:form>  </body>  </html> 

Med hjälp av jsfc- attributet kan samma kod också uttryckas som exemplet nedan:



  
    
         
                
                
                  
        
    
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0  Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  <  html  xmlns  =  "http ://www.w3.org/1999/xhtml"  xmlns:h  =  "http://java.sun.com/jsf/html"  >  <  body  >  <  form  jsfc  =  "h:form"  >  <  span  jsfc  =  "h:outputText"  value  =  "Välkommen, #{loggedInUser.name}"  disabled  =  "#{tom logdInUser}"  />  <  input  type  =  "text"  jsfc  =  "h:inputText"  value  =  "#{bean.property }"  />  <  input  type  =  "submit"  jsfc  =  "h:commandButton"  value  =  "OK"  action  =  "#{bean.doSomething}"  />  </  form  >  </  body  >  </  html  > 

Ovanstående kod kan ses i en webbläsare och redigeras med konventionella WYSIWYG -designverktyg. Detta är inte möjligt när du direkt använder de kvalificerade taggarna. Ändå är direkt användning av kvalificerade taggar det mest populära sättet att använda Facelets i praktiken och är den stil som används mest i böcker och exempel.

Mallar

Facelets ger en möjlighet att malla. En Facelets-fil kan referera till en huvudmall och tillhandahålla innehåll för platshållarna som denna huvudmall definierar. Filen som refererar till en sådan mall kallas mallklienten . Mallklienter själva kan återigen användas som en mall för andra mallklienter och som sådan kan en hierarki av mallar skapas.

Följande visar ett exempel på en enkel huvudmall:

templates/master_template.xhtml



  
    
    

    
          
          
    

      
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0  Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  <html  xmlns=  "http ://www.w3.org/1999/xhtml"  xmlns:h=  "http://java.sun.com/jsf/html"  xmlns:ui=  "http://java.sun.com/jsf/facelets "  >  <h:head>  <meta  http-equiv=  "content-type"  content=  "text/html;charset=UTF-8"  />  <meta  http-equiv=  "pragma"  content=  "no-cache"  / >  </h:head>  <h:body>  Standardhuvudtext för varje sida.  <ui:insert  name=  "body_content"  />  Standardsidfotstext för varje sida.  </h:body>  </html> 

Ovanstående kod innehåller en standard HTML-ram och en enda platshållare som kallas body_content . En mallklient kan använda den här mallen enligt följande:

template_client.xhtml

 
    
    

     
 <ui:composition  template=  "/templates/master_template.xhtml"  xmlns=  "http://www.w3.org/1999/xhtml"  xmlns:ui=  "http://java.sun.com/jsf/facelets"  >  <ui:define  name=  "body_content"  >  Detta är en mallklientsida som använder huvudmallen.  </ui:define>  </ui:composition> 

Ovanstående kod använder sig av mallen /templates/master_template.xhtml och tillhandahåller innehåll för platshållaren i den mallen. Slutresultatet blir en sida som heter template_client.xhtml som har innehållet /templates/master_template.xhtml , men med <ui:insert name="body_content"/> ersatt av 'Detta är en mallklientsida som använder mastermallen .'.

Återanvändning av innehåll

Förutom mallar ger Facelets stöd för återanvändning genom att låta användaren inkludera innehåll som finns i en annan fil. Att inkludera sådant innehåll kan göras på tre olika sätt:

  • Refererar till en fil
  • Anpassade taggar
  • Kompositkomponenter

Refererar till en fil

Det enklaste sättet att inkludera innehållet i en annan Facelet är att hänvisa till det med namn med taggen < ui :include> . Detta gör att innehållet i den refererade filen inkluderas direkt i den anropande Facelet av Facelets-kompilatorn. Förutom att återanvända innehåll på flera platser, kan detta användas för att dela upp en stor Facelet i mindre delar.

Följande visar ett exempel:

templates/master_template.xhtml



  
    
    

      

      
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0  Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  <html  xmlns=  "http ://www.w3.org/1999/xhtml"  xmlns:h=  "http://java.sun.com/jsf/html"  xmlns:ui=  "http://java.sun.com/jsf/facelets "  >  <ui:include  src=  "html_head.xhtml"  />  <h:body>  Standardhuvudtext för varje sida.  <ui:insert  name=  "body_content"  />  Standardsidfotstext för varje sida.  </h:body>  </html> 

html_head.xhtml


    
    

    
          
          
    
 <ui:composition  xmlns=  "http://www.w3.org/1999/xhtml"  xmlns:h=  "http://java.sun.com/jsf/html"  >  <h:head>  <meta  http- equiv=  "content-type"  content=  "text/html;charset=UTF-8"  />  <meta  http-equiv=  " pragma"  content=  "no-cache"  />  </h:head>  </ui: sammansättning> 

Anpassade taggar

Facelets stöder indirektion för att inkludera innehåll via anpassade taggar. En sådan anpassad tagg kan associeras med en Facelet i en taglib-fil. Förekomster av den taggen kommer då att ersättas med innehållet i den associerade Facelet.

Följande visar ett exempel på detta:

templates/master_template.xhtml



  
    
    
    

      

    

           
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0  Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  <html  xmlns=  "http ://www.w3.org/1999/xhtml"  xmlns:h=  "http://java.sun.com/jsf/html"  xmlns:ui=  "http://java.sun.com/jsf/facelets "  xmlns:my=  "http://example.com/my"  >  <ui:include  src=  "html_head.xhtml"  />  <h:body>  Standardhuvudtext för varje sida.  <my:spacer>  <ui:insert  name=  "body_content"  />  Standardsidfotstext för varje sida.  </h:body>  </html> 

Koden ovan använder taggen <my:spacer> för att markera den punkt i Facelet där innehåll ska infogas. En sådan tagg måste deklareras i en Taglib-fil där den kan associeras med en Facelet enligt följande:

example.taglib.xml


 
     
     
     
     

     

     
          
          
     
 <?xml version="1.0" encoding="UTF-8"?>  <facelet-taglib  xmlns=  "http://java.sun.com/xml/ns/javaee"  xmlns:xsi=  "http://www .w3.org/2001/XMLSchema-instance"  xsi:schemaLocation=  "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0 .xsd"  version=  "2.0"  >  <namespace>  http://example.com/my  </namespace>  <tag>  <tag-name>  spacer  </tag-name>  <source>  spacer.xhtml  </source>  </tag>  </facelet-taglib> 

Följande visar ett exempel på hur det faktiska innehållet Facelet kan se ut:

spacer.xhtml


    
     
    

      
 <ui:composition  xmlns=  "http://www.w3.org/1999/xhtml"  xmlns:ui=  "http://java.sun.com/jsf/facelets"  xmlns:h=  "http://java .sun.com/jsf/html"  >  <h:outputText  value=  "&amp;nbsp;"  escape=  "false"  />  </ui:composition> 

Kompositkomponenter

Förutom att inkludera innehåll direkt, tillhandahåller Facelets den sammansatta komponentmekanismen som gör innehåll tillgängligt som en förstklassig JSF-komponent. Sammansatta komponenter behöver inte deklareras i en Taglib-fil, utan måste placeras i en speciell katalog. Enligt konvention tilldelas innehållet sedan automatiskt ett namnområde och ett taggnamn. Namnutrymmet är konstruerat av den fasta strängen ' http://java.sun.com/jsf/composite/' sammanlänkad med katalognamnet där innehållsfilen finns i förhållande till katalogen 'resurser'. Taggnamnet blir filnamnet utan suffixet .xhtml.

Följande visar ett exempel på detta:

resources/my/spacer.xhtml


    
     
    
    
    
     
          
    
 <ui:composition  xmlns=  "http://www.w3.org/1999/xhtml"  xmlns:ui=  "http://java.sun.com/jsf/facelets"  xmlns:h=  "http://java .sun.com/jsf/html"  xmlns:cc=  "http://java.sun.com/jsf/composite"  >  <cc:interface/>  <cc:implementation>  <h:outputText  value=  "&amp;nbsp ;"  escape=  "false"  />  </cc:implementation>  </ui:composition> 

Ovanstående Facelet är automatiskt tillgänglig som en komponent i namnutrymmet 'http://java.sun.com/jsf/composite/my' och taggnamnet 'spacer'

Parametriserad inkluderar

För att anpassa inkluderat innehåll tillåter Facelets att parametrar används. Via dessa parametrar kan objekt skickas in i det inkluderade innehållet, där de kan användas som variabler. För mekanismen <ui:include> kan <ui:param> användas för detta, medan för anpassade taggar och sammansatta komponenter kan normala taggattribut användas. Sammansatta komponenter kräver att parametrar deklareras i deras gränssnittssektion, medan det för anpassade taggar inte finns något sådant krav och värden som tillhandahålls för godtyckliga attribut görs tillgängliga som variabler med samma namn som nämnda attribut.

Se även

Bibliografi

externa länkar