ข้อเสีย JSF 2.0? จริงๆแล้วนอกเหนือจากการเรียนรู้ที่สูงชันเมื่อคุณไม่มีความรู้พื้นฐานเกี่ยวกับการพัฒนาเว็บขั้นพื้นฐาน (HTML / CSS / JS, ฝั่งเซิร์ฟเวอร์กับฝั่งไคลเอ็นต์, ฯลฯ ) และJava Servlet API ขั้นพื้นฐาน (คำขอ / ตอบกลับ / เซสชัน การส่งต่อ / การเปลี่ยนเส้นทาง ฯลฯ ) ไม่มีข้อเสียที่ร้ายแรงอยู่ในใจ JSF ในรีลีสปัจจุบันยังคงต้องการกำจัดภาพลบที่ได้รับในช่วงวัยเด็กซึ่งมีข้อเสียร้ายแรงหลายประการ
JSF 1.0 (มีนาคม 2004)
นี่คือการเปิดตัวครั้งแรก มันเต็มไปด้วยข้อบกพร่องทั้งในส่วนหลักและส่วนประสิทธิภาพที่คุณไม่ต้องการรู้ แอปพลิเคชันของคุณไม่ได้ผลเสมอไป คุณในฐานะนักพัฒนาจะร้องไห้อย่างหนัก
JSF 1.1 (พฤษภาคม 2004)
นี่เป็นรุ่นแก้ไขข้อผิดพลาด ประสิทธิภาพยังไม่ดีขึ้นมาก มีข้อเสียอย่างหนึ่งที่สำคัญคือคุณไม่สามารถอินไลน์ HTML ในหน้า JSF ได้อย่างไม่มีที่ติ vanilla HTML ล้วนรับการเรนเดอร์ก่อนโครงสร้างส่วนประกอบ JSF คุณจำเป็นต้องห่อวานิลลาธรรมดาทั้งหมดใน<f:verbatim>
แท็กเพื่อให้มันถูกรวมไว้ในโครงสร้างองค์ประกอบ JSF แม้ว่านี่จะเป็นไปตามข้อกำหนด แต่ก็ได้รับการวิจารณ์จำนวนมาก ดูเพิ่มเติม ao JSF / Facelets: เหตุใดจึงไม่ควรผสม JSF / Facelets กับแท็ก HTML
JSF 1.2 (พฤษภาคม 2549)
นี่เป็นรุ่นแรกของทีมพัฒนา JSF ใหม่ที่นำโดย Ryan Lubke ทีมใหม่ทำงานได้ดีเยี่ยมมาก นอกจากนี้ยังมีการเปลี่ยนแปลงในสเป็ค การเปลี่ยนแปลงที่สำคัญคือการปรับปรุงการจัดการมุมมอง สิ่งนี้ไม่เพียง แต่แยกออกอย่างสมบูรณ์จาก JSP JSP ดังนั้นหนึ่งสามารถใช้เทคโนโลยีมุมมองที่แตกต่างจาก JSP แต่มันยังอนุญาตให้นักพัฒนาสามารถ inline ธรรมดาวานิลลา HTML ในหน้า JSF โดยไม่ต้องยุ่งกับ<f:verbatim>
แท็ก จุดสนใจที่สำคัญอีกประการหนึ่งของทีมใหม่คือการปรับปรุงประสิทธิภาพ ในช่วงอายุการใช้งานของ Sun JSF Reference Implementation 1.2 (ซึ่งมีชื่อรหัสว่าMojarraตั้งแต่สร้าง 1.2_08 ประมาณปี 2008) ในทางปฏิบัติทุกบิลด์ได้ส่งมอบพร้อมกับการปรับปรุงประสิทธิภาพ (หลัก) ถัดจากข้อผิดพลาดปกติ (เล็กน้อย)
ข้อเสียที่ร้ายแรงเพียงหนึ่งเดียวของ 1.x JSF (รวม 1.2) คือการขาดการขอบเขตในระหว่างการร้องขอและเซสชั่นขอบเขตที่เรียกว่าการสนทนาขอบเขต นักพัฒนานี้ถูกบังคับให้ยุ่งยากกับองค์ประกอบการป้อนข้อมูลที่ซ่อนอยู่, แบบสอบถามฐานข้อมูลที่ไม่จำเป็นและ / หรือใช้ขอบเขตเซสชันเมื่อใดก็ตามที่ผู้ใช้ต้องการเก็บข้อมูลโมเดลเริ่มต้นในคำขอถัดไปเพื่อที่จะประมวลผลการตรวจสอบความถูกต้อง แอปพลิเคชันที่ซับซ้อน ความเจ็บปวดอาจลดลงได้โดยการใช้ห้องสมุดบุคคลที่ 3 ซึ่งเก็บข้อมูลที่จำเป็นไว้ในคำขอต่อไปเช่นMyFaces Tomahawk <t:saveState>
component, ขอบเขตการสนทนาJBoss SeamและMyFaces Orchestra กรอบการสนทนา
ข้อเสียเปรียบอีกประการสำหรับการใช้ HTML / CSS คือ JSF ใช้โคลอน:
เป็นตัวคั่น ID เพื่อให้แน่ใจว่าองค์ประกอบ HTML id
ในเอาท์พุต HTML ที่สร้างขึ้นไม่ซ้ำกันโดยเฉพาะอย่างยิ่งเมื่อส่วนประกอบถูกนำมาใช้ซ้ำมากกว่าหนึ่งครั้งในมุมมอง (เทมเพลต . เพราะนี่เป็นตัวละครที่ผิดกฎหมายในตัวระบุ CSS คุณจะต้องใช้\
ในการหลบหนีลำไส้ใหญ่ในตัวเลือก CSS ที่มีผลในตัวเลือกที่น่าเกลียดและแปลกมองเช่นหรือแม้กระทั่ง#formId\:fieldId {}
#formId\3A fieldId {}
ดูเพิ่มเติมวิธีใช้ JSF สร้างรหัสองค์ประกอบ HTML กับโคลอน ":" ในตัวเลือก CSS ได้อย่างไร แต่ถ้าคุณไม่ได้เป็นคนเจ้าระเบียบอ่านยังโดยค่าเริ่มต้น JSF สร้างรหัสที่ใช้ไม่ได้ซึ่งจะเข้ากันกับส่วนหนึ่งของ CSS มาตรฐานเว็บ
นอกจากนี้ JSF 1.x ไม่ได้จัดส่งสิ่งอำนวยความสะดวก Ajax ออกจากกล่อง ไม่ใช่ข้อเสียทางเทคนิคจริงๆ แต่เนื่องจาก Web 2.0 hype ในช่วงเวลานั้นมันกลายเป็นข้อเสียการทำงาน Exadelได้เปิดตัว Ajax4jsf ซึ่งได้รับการพัฒนาอย่างละเอียดในช่วงหลายปีที่ผ่านมาและกลายเป็นส่วนสำคัญของไลบรารีคอมโพเนนต์JBoss RichFaces อีกห้องสมุดองค์ประกอบที่ถูกส่งไปด้วยในตัวพลังอาแจ็กซ์เป็นอย่างดีที่รู้จักกันดีหนึ่งเป็นICEfaces
ประมาณครึ่งอายุการใช้งาน JSF 1.2 ซึ่งเป็นเทคโนโลยี XML มุมมองใหม่บนพื้นฐานได้รับการแนะนำ: Facelets สิ่งนี้นำเสนอข้อได้เปรียบอย่างมหาศาลเหนือ JSP โดยเฉพาะในพื้นที่ของการสร้างเทมพ
JSF 2.0 (มิถุนายน 2552)
นี่เป็นรุ่นใหญ่ครั้งที่สองโดยมี Ajax เป็น buzzword มีการเปลี่ยนแปลงทางเทคนิคและฟังก์ชั่นมากมาย JSP ถูกแทนที่ด้วย Facelets เนื่องจากเทคโนโลยีมุมมองเริ่มต้นและ Facelets ถูกขยายด้วยความสามารถในการสร้างส่วนประกอบที่กำหนดเองโดยใช้ XML บริสุทธิ์ ( คอมโพเนนต์คอมโพสิตที่เรียกว่า) ดูเพิ่มเติมเพราะเหตุใดจึงเลือก Facelets มากกว่า JSP เนื่องจากภาษาการนิยามมุมมองจาก JSF2.0 เป็นต้นไป
อาแจ็กซ์พาวเวอร์ได้รับการแนะนำในรสชาติของ<f:ajax>
ส่วนประกอบที่มีความคล้ายคลึงกันมากกับ Ajax4jsf คำอธิบายประกอบและการปรับปรุงการกำหนดค่าแบบแผนได้ถูกนำเสนอเพื่อฆ่าfaces-config.xml
ไฟล์verbose ให้มากที่สุด นอกจากนี้อักขระการตั้งชื่อเริ่มต้นของตัวคั่น ID คอนเทนเนอร์:
ก็สามารถกำหนดค่าได้ดังนั้นผู้ที่จะใช้ HTML / CSS ก็สามารถผ่อนคลายได้ ทั้งหมดที่คุณต้องทำคือการกำหนดเป็นinit-param
ในweb.xml
ที่มีชื่อjavax.faces.SEPARATOR_CHAR
และมั่นใจว่าคุณไม่ได้ใช้ตัวอักษรตัวเองได้ทุกที่ใน ID -
ของลูกค้าเช่น
สุดท้าย แต่ไม่น้อยขอบเขตใหม่ได้รับการแนะนำที่มุมมองขอบเขต มันกำจัดข้อเสียที่สำคัญอีกข้อหนึ่งของ JSF 1.x ตามที่อธิบายไว้ก่อนหน้านี้ คุณเพิ่งประกาศ bean @ViewScoped
เพื่อเปิดใช้งานขอบเขตการสนทนาโดยไม่ต้องยุ่งยากในการเก็บข้อมูลในการร้องขอ (การสนทนา) ที่ตามมา @ViewScoped
ถั่วจะมีชีวิตอยู่ได้นานเท่าที่คุณส่งต่อมาและการนำไปยังมุมมองเดียวกัน (เป็นอิสระจากเบราว์เซอร์เปิดแท็บ / หน้าต่าง!) อย่างใดอย่างหนึ่งพร้อมหรือไม่พร้อม (อาแจ็กซ์) ดูเพิ่มเติมความแตกต่างระหว่างขอบเขตการดูและคำขอในถั่วที่ได้รับการจัดการและวิธีการเลือกขอบเขตถั่วที่ถูกต้อง?
แม้ว่าในทางปฏิบัติแล้วข้อเสียทั้งหมดของ JSF 1.x ถูกกำจัดไปแล้ว แต่มีข้อบกพร่องเฉพาะของ JSF 2.0 ซึ่งอาจกลายเป็น showstopper ความ@ViewScoped
ล้มเหลวในตัวจัดการแท็กเนื่องจากปัญหาไก่ไข่ในการบันทึกสถานะบางส่วน สิ่งนี้ได้รับการแก้ไขใน JSF 2.2 และย้อนกลับใน Mojarra 2.1.18 นอกจากนี้ยังไม่สนับสนุนแอตทริบิวต์ที่กำหนดเองเช่น HTML5data-xxx
ด้วย สิ่งนี้ได้รับการแก้ไขใน JSF 2.2 โดยคุณลักษณะ passthrough ใหม่ / คุณสมบัติ ส่งเสริมการใช้ JSF กระโดงมีชุดของตัวเองของปัญหา ค่อนข้างมากของพวกเขาที่เกี่ยวข้องกับพฤติกรรมบางครั้ง unintuitive ของ<ui:repeat>
การดำเนินการประหยัดรัฐใหม่บางส่วนและขอบเขตการดำเนินการต่ำแฟลช ส่วนใหญ่ได้รับการแก้ไขในเวอร์ชั่น Mojarra 2.2.x
ในช่วงเวลาของ JSF 2.0 นั้นPrimeFacesได้รับการแนะนำโดยใช้ jQuery และ jQuery UI มันกลายเป็นไลบรารีคอมโพเนนต์ JSF ที่นิยมมากที่สุด
JSF 2.2 (พฤษภาคม 2013)
ด้วยการแนะนำ JSF 2.2 ทำให้ HTML5 ถูกใช้เป็น buzzword แม้ว่าจะได้รับการสนับสนุนทางเทคนิคในรุ่น JSF รุ่นเก่าทั้งหมดเท่านั้น ดูเพิ่มเติมJavaServer Faces 2.2 และการสนับสนุน HTML5, XHTML ทำไมยังคงถูกใช้ ที่สำคัญ JSF 2.2 คุณลักษณะใหม่มากที่สุดคือการสนับสนุนสำหรับคุณลักษณะองค์ประกอบที่กำหนดเองขอเปิดโลกของความเป็นไปได้เช่นกลุ่มปุ่ม tableless ที่กำหนดเอง
นอกเหนือจากการใช้งานข้อผิดพลาดเฉพาะและ "สิ่งเล็ก ๆ น้อย ๆ ที่น่ารำคาญ" เช่นการไม่สามารถฉีด EJB ใน validator / converter (แก้ไขแล้วใน JSF 2.3) ไม่มีข้อเสียที่สำคัญในข้อกำหนด JSF 2.2
MVC ตามส่วนประกอบเทียบกับ MVC ตามคำขอ
บางคนอาจเลือกว่าข้อเสียเปรียบที่สำคัญของ JSF ก็คือมันช่วยให้สามารถควบคุม HTML / CSS / JS ได้อย่างละเอียด ที่ไม่ JSF ของตัวเองว่าเป็นเพียงเพราะมันเป็นองค์ประกอบตามกรอบ MVC ไม่คำขอ (การกระทำ) ตามกรอบ MVC ถ้าระดับสูงของการควบคุม HTML / CSS / JS เป็นความต้องการที่สำคัญของคุณเมื่อพิจารณากรอบ MVC แล้วคุณควรแล้วไม่ได้มองไปที่องค์ประกอบตามกรอบ MVC แต่ในคำขอตามกรอบ MVC เหมือนฤดูใบไม้ผลิ MVC คุณจะต้องคำนึงถึงว่าคุณจะต้องเขียน HTML / CSS / JS สำเร็จรูปทั้งหมดด้วยตัวคุณเอง ดูเพิ่มเติมความแตกต่างระหว่างการขอ MVC และตัวแทน MVC
ดูสิ่งนี้ด้วย: