กลับไปหน้าบทความ

อ่าน 6 นาที

เฟซเล็ต

ในด้านคอมพิวเตอร์ Facelets คือ ระบบ เทมเพลตเว็บ แบบโอเพนซอร์ส ภายใต้ ใบอนุญาต Apache และเป็นเทคโนโลยีตัวจัดการมุมมองเริ่มต้น (หรือที่เรียกว่าภาษาประกาศมุมมอง) สำหรับ Jakarta Faces...

เฟซเล็ต

เฟซเล็ต
เวอร์ชันเสถียร
2.0 / 28 มิถุนายน 2552 ( 28 มิถุนายน 2552 )
เขียนเป็นชวา
ระบบปฏิบัติการข้ามแพลตฟอร์ม
พิมพ์ระบบเทมเพลตเว็บ
เว็บไซต์facelets .dev .java .net แก้ไขข้อมูลนี้บนวิกิดาต้า
เฟซเล็ตแบบสแตนด์อะโลน
เวอร์ชันเสถียร
1.1.15 / 24 พฤศจิกายน 2552 ( 24 พฤศจิกายน 2552 )
รุ่นทดลองใช้งาน
1.2-dev / 10 พฤศจิกายน 2549 (2006-11-10)
เขียนเป็นชวา
ระบบปฏิบัติการข้ามแพลตฟอร์ม
ขนาด5.07 MB (ไฟล์ที่ถูกจัดเก็บ)
พิมพ์ระบบเทมเพลตเว็บ
ใบอนุญาตใบอนุญาต Apache 2.0
เว็บไซต์facelets .java .net

ในด้านคอมพิวเตอร์Facelets คือระบบเทมเพลตเว็บแบบโอเพนซอร์ส ภายใต้ใบอนุญาต Apacheและเป็นเทคโนโลยีตัวจัดการมุมมองเริ่มต้น (หรือที่เรียกว่าภาษาประกาศมุมมอง) สำหรับJakarta Faces (JSF; เดิมชื่อ Jakarta Server Faces และ JavaServer Faces) ภาษาดังกล่าวต้องการ เอกสาร XML ที่ถูกต้องเป็นอินพุตเพื่อใช้งาน Facelets รองรับส่วนประกอบ UI ของ JSFทั้งหมดและมุ่งเน้นไปที่การสร้างโครงสร้างส่วนประกอบ JSF โดยสมบูรณ์ ซึ่งสะท้อนถึงมุมมองสำหรับแอปพลิเคชัน JSF

แม้ว่า เทคโนโลยี JSPและFacesจะได้รับการปรับปรุงให้ทำงานร่วมกันได้ดียิ่งขึ้น แต่ Facelets ก็ได้ขจัดปัญหาต่างๆ ที่ระบุไว้ในบทความของHans Bergsten เรื่อง "การปรับปรุง JSF โดยการทิ้ง JSP" [ 1 ]

Facelets ดึงเอาแนวคิดบางส่วนมาจากApache Tapestry [ 2 ] [ 3 ] และมีความคล้ายคลึงกันมากพอที่จะนำมาเปรียบเทียบกัน ได้โครงการนี้มีแนวคิดคล้ายกับ Tapestry ซึ่งถือว่าบล็อกขององค์ประกอบ HTML เป็นส่วนประกอบเฟรมเวิร์กที่รองรับโดยคลาส Java Facelets ยังมีความคล้ายคลึงกับ เฟรมเวิร์ก Apache Tilesในแง่ของการสนับสนุนการสร้างเทมเพลตและการประกอบอีกด้วย

Facelets ถูกสร้างขึ้นครั้งแรกโดย Jacob Hookom ในปี 2548 [ 3 ]ในฐานะภาษาการประกาศมุมมองทางเลือกที่แยกต่างหากสำหรับ JSF 1.1 และ JSF 1.2 ซึ่งทั้งสองใช้ JSP เป็นภาษาการประกาศมุมมองเริ่มต้น ตั้งแต่ JSF 2.0 เป็นต้นไป Facelets ได้รับการส่งเสริมโดยกลุ่มผู้เชี่ยวชาญ JSF ให้เป็นภาษาการประกาศมุมมองเริ่มต้น JSP ถูกยกเลิกการใช้งานในฐานะภาษาสำรองแบบเก่า[ 4 ] [ 5 ]

การแปลงองค์ประกอบ

ใน Facelets แท็กเทมเพลตจากไลบรารีแท็กสามารถป้อนได้สองรูปแบบ: โดยตรงเป็นxmlองค์ประกอบที่มีคุณสมบัติครบถ้วน หรือโดยอ้อมผ่านjsfcแอตทริบิวต์บนองค์ประกอบที่ไม่ระบุคุณสมบัติใดๆ ในกรณีหลัง คอมไพเลอร์ Facelet จะไม่สนใจองค์ประกอบจริงและจะประมวลผลองค์ประกอบนั้นราวกับว่าเป็นองค์ประกอบที่กำหนดโดยjsfcแอตทริบิวต์

ตัวอย่างต่อไปนี้แสดงการใช้งานแท็กที่มีคุณสมบัติครบถ้วนโดยตรง:

<!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= "ยินดีต้อนรับ, #{loggedInUser.name}" disabled= "#{empty loggedInUser}" /> <h:inputText value= "#{bean.property}" /> <h:commandButton value= "ตกลง" action= "#{bean.doSomething}" /> </h:form> </body> </html>

เมื่อใช้jsfcแอตทริบิวต์ โค้ดเดียวกันนี้สามารถแสดงได้ดังตัวอย่างด้านล่าง:

< ! 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 = "ยินดีต้อนรับ, #{loggedInUser.name}" disabled = "#{empty loggedInUser}" /> < input type = "text" jsfc = "h:inputText" value = "#{bean.property}" /> < input type = "submit" jsfc = "h:commandButton" value = "ตกลง" action = " #{bean.doSomething}" /> </form> < / เนื้อหา> </ html >

โค้ดข้างต้นสามารถดูได้ในเบราว์เซอร์ และแก้ไขได้ด้วย เครื่องมือออกแบบ WYSIWYG ทั่วไป ซึ่งเป็นไปไม่ได้หากใช้แท็กที่มีคุณสมบัติโดยตรง อย่างไรก็ตาม การใช้แท็กที่มีคุณสมบัติโดยตรงเป็นวิธีที่นิยมใช้ Facelets ในทางปฏิบัติมากที่สุด[ 6 ]และเป็นรูปแบบที่ใช้มากที่สุดในหนังสือและตัวอย่าง[ 7 ] [ 8 ]

การสร้างเทมเพลต

Facelets มีฟังก์ชันสำหรับการสร้างเทมเพลต[ 9 ] [ 10 ]ไฟล์ Facelets สามารถอ้างอิงเทมเพลตหลักและให้เนื้อหาสำหรับตัวยึดตำแหน่งที่เทมเพลตหลักนี้กำหนดไว้ ไฟล์ที่อ้างอิงเทมเพลตดังกล่าวเรียกว่าไคลเอ็นต์เทมเพลตไคลเอ็นต์เทมเพลตเองก็สามารถใช้เป็นเทมเพลตสำหรับไคลเอ็นต์เทมเพลตอื่นๆ ได้อีก และด้วยเหตุนี้จึงสามารถสร้างลำดับชั้นของเทมเพลตได้

ต่อไปนี้เป็นตัวอย่างของแม่แบบหลักอย่างง่าย:

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> ข้อความส่วนหัวมาตรฐานสำหรับทุกหน้า</h:body><ui:insert name= "body_content" />ข้อความท้ายหน้ามาตรฐานสำหรับทุกหน้า </h:body> </html>

โค้ดด้านบนประกอบด้วย 'เฟรม' HTML เริ่มต้น และตัวยึดตำแหน่งเดียวที่เรียกว่าbody_contentไคลเอนต์เทมเพลตสามารถใช้เทมเพลตนี้ได้ดังนี้:

เทมเพลต_ไคลเอ็นต์.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" >นี่คือหน้าไคลเอ็นต์เทมเพลตที่ใช้เทมเพลตหลัก</ui:define> < / ui:composition>

โค้ดด้านบนใช้เทมเพลต/templates/master_template.xhtmlและใส่เนื้อหาลงในช่องว่างในเทมเพลตนั้น ผลลัพธ์สุดท้ายจะเป็นหน้าเว็บtemplate_client.xhtmlที่มีเนื้อหาเหมือนกับ หน้าเว็บต้นฉบับ /templates/master_template.xhtmlแต่ข้อความ<ui:insert name="body_content"/>"นี่คือหน้าเว็บไคลเอ็นต์เทมเพลตที่ใช้เทมเพลตหลัก" จะถูกแทนที่ด้วยข้อความเดิม

การนำเนื้อหามาใช้ซ้ำ

นอกเหนือจากการสร้างเทมเพลตแล้ว Facelets ยังรองรับการนำเนื้อหามาใช้ซ้ำโดยอนุญาตให้ผู้ใช้สามารถรวมเนื้อหาที่อยู่ในไฟล์อื่นได้ การรวมเนื้อหาดังกล่าวสามารถทำได้สามวิธี:

  • การอ้างอิงไฟล์
  • แท็กแบบกำหนดเอง
  • ส่วนประกอบคอมโพสิต

การอ้างอิงไฟล์

วิธีที่ง่ายที่สุดในการรวมเนื้อหาของ Facelet อื่นคือการอ้างอิงโดยใช้ชื่อโดยใช้<ui:include>แท็ก[ 11 ] [ 12 ]วิธีนี้จะทำให้เนื้อหาในไฟล์ที่อ้างอิงถูกรวมเข้าไปใน Facelet ที่เรียกใช้โดยตรงโดยคอมไพเลอร์ Facelets นอกจากการนำเนื้อหามาใช้ซ้ำในหลายตำแหน่งแล้ว ยังสามารถใช้เพื่อแบ่ง Facelet ขนาดใหญ่ให้เป็นส่วนย่อยๆ ได้อีกด้วย

ตัวอย่างต่อไปนี้แสดงให้เห็น:

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> ข้อความส่วนหัวมาตรฐานสำหรับทุกหน้า</h:body><ui:insert name= "body_content" />ข้อความท้ายหน้ามาตรฐานสำหรับทุกหน้า </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:composition>

แท็กแบบกำหนดเอง

Facelets รองรับการอ้างอิงทางอ้อมสำหรับการรวมเนื้อหาผ่านแท็กแบบกำหนดเอง[ 13 ]แท็กแบบกำหนดเองดังกล่าวสามารถเชื่อมโยงกับ Facelet ในไฟล์ taglib ได้ จากนั้นการปรากฏของแท็กนั้นจะถูกแทนที่ด้วยเนื้อหาของ Facelet ที่เกี่ยวข้อง

ต่อไปนี้เป็นตัวอย่างของเรื่องนี้:

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> ข้อความส่วนหัวมาตรฐานสำหรับทุกหน้า<my:spacer><ui:insert name= "body_content" />ข้อความท้ายหน้ามาตรฐานสำหรับทุกหน้า </h:body> </html>

โค้ดด้านบนใช้แท็ก<my:spacer>เพื่อระบุจุดใน Facelet ที่จะแทรกเนื้อหา แท็กดังกล่าวจะต้องประกาศไว้ในไฟล์ Taglib ซึ่งสามารถเชื่อมโยงกับ Facelet ได้ดังนี้:

ตัวอย่าง.แท็กลิบ.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>

ต่อไปนี้เป็นตัวอย่างของเนื้อหาที่ Facelet อาจมีลักษณะดังนี้:

ตัวเว้นวรรค 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= " " escape= "false" /> </ui:composition>

ส่วนประกอบคอมโพสิต

นอกจากการรวมเนื้อหาโดยตรงแล้ว Facelets ยังมีกลไกส่วนประกอบคอมโพสิตที่ทำให้เนื้อหาพร้อมใช้งานเป็นส่วนประกอบ JSF ระดับเฟิ ร์สคลาส [ 14 ] [ 15 ]ส่วนประกอบคอมโพสิตไม่จำเป็นต้องประกาศในไฟล์ Taglib แต่ต้องวางไว้ในไดเร็กทอรีพิเศษ ตามธรรมเนียมแล้ว เนื้อหาจะถูกกำหนดเนมสเปซและชื่อแท็กโดยอัตโนมัติ เนมสเปซถูกสร้างขึ้นจากสตริงคงที่ ' http://java.sun.com/jsf/composite/'ที่ต่อท้ายกับชื่อไดเร็กทอรีที่ไฟล์เนื้อหาอยู่ โดยสัมพันธ์กับไดเร็กทอรี 'resources' [ 16 ]ชื่อแท็กจะกลายเป็นชื่อไฟล์โดยไม่มีส่วนต่อท้าย .xhtml

ต่อไปนี้เป็นตัวอย่างของเรื่องนี้:

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= " " escape= "false" /> </cc:implementation> </ui:composition>

Facelet ด้านบนนี้สามารถใช้งานได้โดยอัตโนมัติในฐานะคอมโพเนนต์ในเนมสเปซ 'http://java.sun.com/jsf/composite/my' และชื่อแท็ก 'spacer'

ประกอบด้วยพารามิเตอร์

เพื่อปรับแต่งเนื้อหาที่รวมอยู่ Facelets อนุญาตให้ใช้พารามิเตอร์ได้ ผ่านพารามิเตอร์เหล่านั้น วัตถุสามารถส่งผ่านเข้าไปในเนื้อหาที่รวมอยู่ ซึ่งสามารถใช้เป็นตัวแปรได้ สำหรับ<ui:include>กลไกที่<ui:param>สามารถใช้ได้สำหรับสิ่งนี้[ 17 ]ในขณะที่สำหรับแท็กแบบกำหนดเองและส่วนประกอบคอมโพสิต สามารถใช้แอตทริบิวต์แท็กปกติได้ ส่วนประกอบคอมโพสิตต้องการให้ประกาศพารามิเตอร์ในส่วนอินเทอร์เฟซ[ 18 ]ในขณะที่แท็กแบบกำหนดเองไม่มีข้อกำหนดดังกล่าว และค่าที่ให้ไว้สำหรับแอตทริบิวต์ที่กำหนดเองจะพร้อมใช้งานเป็นตัวแปรที่มีชื่อเดียวกันกับแอตทริบิวต์ดังกล่าว

ดูเพิ่มเติม

บรรณานุกรม

  • Wadia, Zubin; Marinschek, Martin; Saleh, Hazem; Byrne, Dennis (22 กันยายน 2551). คู่มือฉบับสมบูรณ์สำหรับ Apache MyFaces และ Facelets (ฉบับพิมพ์ครั้งที่ 1). Apress . หน้า 400. ISBN 978-1-59059-737-8เก็บถาวรจากต้นฉบับเมื่อวันที่ 2 มกราคม 2553 เรียกดูเมื่อวันที่ 4 กันยายน 2552
  • Wadia, Zubin; Aranda, Bruno (26 พฤษภาคม 2551). Facelets Essentials: คู่มือสำหรับ JavaServer Faces View Definition Framework (ฉบับที่ 1). Apress . หน้า 84. ISBN 978-1-4302-1049-8เก็บถาวรจากต้นฉบับเมื่อวันที่ 8 มกราคม 2553 เรียกดูเมื่อวันที่ 4 กันยายน 2552
  • " บทนำเกี่ยวกับ Facelets " บทที่ 8 ของคู่มือ Jakarta EE Tutorial
  • เอกสารประกอบการพัฒนา FaceletsบนWayback Machine (เก็บถาวรเมื่อ 31 ธันวาคม 2016)
  • ไฮทาวเวอร์, ริชาร์ด (21 กุมภาพันธ์ 2549). "Facelets เข้ากับ JSF ได้อย่างลงตัว" . Java. DeveloperWorks . IBM . เก็บถาวรจากต้นฉบับเมื่อ 24 กุมภาพันธ์ 2564
  • หน้าแรกของ FaceletsบนWayback Machine (เก็บถาวรเมื่อ 4 เมษายน 2017)
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Facelets&oldid=1286641252 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ เฟซเล็ต

ในด้านคอมพิวเตอร์ Facelets คือ ระบบ เทมเพลตเว็บ แบบโอเพนซอร์ส ภายใต้ ใบอนุญาต Apache และเป็นเทคโนโลยีตัวจัดการมุมมองเริ่มต้น (หรือที่เรียกว่าภาษาประกาศมุมมอง) สำหรับ Jakarta Faces...

การแปลงองค์ประกอบ

ใน Facelets แท็กเทมเพลตจากไลบรารีแท็กสามารถป้อนได้สองรูปแบบ: โดยตรงเป็น xml องค์ประกอบที่มีคุณสมบัติครบถ้วน หรือโดยอ้อมผ่าน jsfc แอตทริบิวต์บนองค์ประกอบที่ไม่ระบุคุณสมบัติใดๆ ในกรณีหลัง คอมไพเลอร์ Facelet...

การสร้างเทมเพลต

Facelets มีฟังก์ชันสำหรับการสร้างเทมเพลต [ 9 ] [ 10 ] ไฟล์ Facelets สามารถอ้างอิงเทมเพลตหลักและให้เนื้อหาสำหรับตัวยึดตำแหน่งที่เทมเพลตหลักนี้กำหนดไว้ ไฟล์ที่อ้างอิงเทมเพลตดังกล่าวเรียกว่า ไคลเอ็นต์เทมเพลต...

การนำเนื้อหามาใช้ซ้ำ

นอกเหนือจากการสร้างเทมเพลตแล้ว Facelets ยังรองรับการนำเนื้อหามาใช้ซ้ำโดยอนุญาตให้ผู้ใช้สามารถรวมเนื้อหาที่อยู่ในไฟล์อื่นได้ การรวมเนื้อหาดังกล่าวสามารถทำได้สามวิธี: