Facelets
Stabil frisättning | 2.0 / 28 juni 2009
|
---|---|
Skrivet i | Java |
Operativ system | Cross-plattform |
Typ | Webbmallssystem |
Hemsida |
|
Stabil frisättning | 1.1.15 / 24 november 2009
|
---|---|
Förhandsgranska release | 1.2-dev / 10 november 2006
|
Skrivet i | Java |
Operativ system | Cross-plattform |
Storlek | 5,07 MB (arkiverad) |
Typ | Webbmallssystem |
Licens | Apache-licens 2.0 |
Hemsida |
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= "&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= "&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
- Wadia, Zubin; Marinschek, Martin; Saleh, Hazem; Byrne, Dennis (22 september 2008). The Definitive Guide to Apache MyFaces and Facelets (1:a upplagan). Apress . sid. 400. ISBN 978-1-59059-737-8 . Arkiverad från originalet den 2 januari 2010 . Hämtad 4 september 2009 .
- Wadia, Zubin; Aranda, Bruno (26 maj 2008). Facelets Essentials: Guide to JavaServer Faces View Definition Framework (första upplagan). Apress . sid. 84. ISBN 978-1-4302-1049-8 . Arkiverad från originalet den 8 januari 2010 . Hämtad 4 september 2009 .
externa länkar
- " Introduktion till faceletter " Kapitel 8 i Jakarta EE Tutorial
- Facelets Developer Documentation at the Wayback Machine (arkiverad 2016-12-31)
- Hightower, Richard (21 februari 2006). "Facelets passar JSF som handen i handsken" . Java. DeveloperWorks . IBM . Arkiverad från originalet 2021-02-24.
- Facelets hemsida på Wayback Machine (arkiverad 2017-04-04)