ความต้องการของ JSF คืออะไรเมื่อ UI สามารถทำได้ด้วยไลบรารี JavaScript เช่น jQuery และ AngularJS


116

ฉันอ่านเกี่ยวกับ JSF ซึ่งเป็นกรอบงาน UI และมีส่วนประกอบ UI บางอย่าง แต่จะดีกว่าหรือแตกต่างอย่างไรจากจำนวนส่วนประกอบที่มีให้เลือกตั้งแต่ jQueryUI, AngularJS, ExtJS หรือแม้แต่ HTML ธรรมดา, CSS และ JavaScript

ทำไมคนถึงควรเรียน JSF


3
ข้อดีของ html ที่สร้างโดยเซิร์ฟเวอร์: ความสามารถในการค้นหาของเครื่องมือค้นหาซ่อนมุมมองตามการอนุญาต มิฉะนั้นเราได้ละทิ้งมันเพื่อ ui ajax บริสุทธิ์
Neil McGuigan

5
ฉันยังละทิ้ง JSF เพื่อสนับสนุนแบ็กเอนด์ AngularJS + RESTful (แอปเปิ้ลและส้ม แต่ Angular ดีมากฉันไม่ต้องการประโยชน์มากมายจาก JSF)
arg20

JSF เป็นเฟรมเวิร์ก MVC ที่ใช้คอมโพเนนต์ซึ่งสร้างขึ้นบน Servlet API และจัดเตรียมส่วนประกอบผ่าน taglibs ซึ่งสามารถใช้ใน JSP หรือเทคโนโลยีมุมมองที่ใช้ Java อื่น ๆ เช่น Facelets
Divyesh Kanzariya

คำตอบ:


154

JSF เป็น JSP / Servlet / HTML / CSS / JS ธรรมดาก็เหมือนกับ jQuery เป็น JS ธรรมดา: ทำได้มากขึ้นโดยใช้โค้ดน้อยลง หากต้องการใช้PrimeFaces (ใช้ jQuery + jQuery UI เป็นตัวอย่าง) ให้เรียกดูตู้โชว์เพื่อดูตัวอย่างโค้ดทั้งหมด BootsFaces (ตาม jQuery + Bootstrap UI) ยังมีตู้โชว์พร้อมตัวอย่างโค้ดที่สมบูรณ์ หากคุณศึกษาตัวอย่างเหล่านั้นอย่างละเอียดคุณจะเห็นว่าโดยพื้นฐานแล้วคุณต้องมีคลาส Javabean แบบธรรมดาเป็นโมเดลและมีไฟล์ XHTML เป็นมุมมอง

โปรดทราบว่าคุณไม่ควรมองว่า JSF แทนที่ HTML / CSS / JS เพียงอย่างเดียวคุณควรคำนึงถึงส่วนของฝั่งเซิร์ฟเวอร์ด้วย (โดยเฉพาะ: JSP / Servlet) JSF ขจัดความต้องการของสำเร็จรูปทั้งหมดในการรวบรวมพารามิเตอร์คำขอ HTTP การแปลง / ตรวจสอบความถูกต้องอัปเดตค่าโมเดลเรียกใช้เมธอด Java ที่เหมาะสมเพื่อทำธุรกิจและสร้างโค้ดสำเร็จรูป HTML / CSS / JS ด้วย JSF โดยทั่วไปคุณจะจบลงด้วยหน้า XHTML เป็นนิยามมุมมองและคลาส Javabean เป็นนิยามโมเดล สิ่งนี้ช่วยเร่งการพัฒนาอย่างมาก

เช่นเดียวกับเฟรมเวิร์ก MVC บนเว็บที่ใช้ส่วนประกอบทั้งหมดคุณมีการควบคุมแบบละเอียดน้อยกว่า JSF ในการแสดงผล HTML / CSS / JS การเพิ่มโค้ด JS ที่กำหนดเองนั้นไม่ใช่เรื่องง่ายเพราะคุณต้องคำนึงถึงสถานะมุมมอง JSF ในฝั่งเซิร์ฟเวอร์ด้วย (เช่นการเปิดใช้งานปุ่มปิดใช้งานในด้าน JS จะไม่เปิดใช้งานปุ่มในด้าน JSF ซึ่งจะเป็น ข้อได้เปรียบด้านความปลอดภัยอย่างมาก) ถ้าเป็นอย่างไรก็ตาม showstopper ใหญ่แล้วแทนที่จะมองหาการดำเนินการตามเว็บกรอบ MVC เหมือนฤดูใบไม้ผลิ MVC คุณจะคำนึงถึงว่าคุณต้องเขียนทุกสิ่งที่ HTML / CSS / รหัส JS (และป้องกัน XSS, CSRF และ DOM จัดการ!) ด้วยตัวคุณเอง นอกจากนี้หากคุณถอยจาก Facelets มาเป็น JSP คุณจะพลาดความสามารถในการทำเทมเพลตขั้นสูงเช่นกัน

ในทางกลับกันหากคุณมีเว็บไซต์ที่ใช้ JSP / Servlet / HTML / CSS / JS / jQuery ขนาดใหญ่และคุณต้องการ refactor โค้ด JSP / Servlet / HTML / CSS / JS / jQuery ที่ซ้ำ ๆ กันเป็นส่วนประกอบที่ใช้ซ้ำได้ หนึ่งในวิธีแก้ปัญหาคือ JSF เทมเพลตที่กำหนดเองไฟล์แท็กและส่วนประกอบสามารถช่วยได้ ในมุมมองนั้น JSF ยืนอยู่เหนือ JSP / Servlet / HTML / CSS / JS / jQuery (และนั่นเป็นเหตุผลว่าทำไมจึงเป็นเรื่องสำคัญที่จะต้องเข้าใจพื้นฐานเหล่านั้นก่อนที่จะดำน้ำใน JSF)

คุณสามารถค้นหาโครงการเขี่ยโลกแห่งความจริง JSF ตามที่นี่: Java EE Kickoff App คุณจะเห็นว่ามีอยู่ข้างๆJSFเป็นHTML5 , CSS3และjQuery ที่ดี

ดูสิ่งนี้ด้วย:


15
ทำได้มากขึ้นโดยใช้รหัสน้อยลงหรือไม่ แต่มี xml มากขึ้น ... ช่างเป็นการแลกเปลี่ยน ... นอกจากนี้ยังช่วยให้คุณมีความยืดหยุ่น
Danubian Sailor

33
ใน JSF 2.0+ ไม่จำเป็นต้องใช้ xml
Cagatay Civici

5
เรามี Annotations ใน JSF 2.0
VdeX

1
ดูเหมือนว่าจะไม่มีการอธิบายที่ชัดเจนระหว่างเลเยอร์ธุรกิจ / คอนโทรลเลอร์และมุมมองด้วย JSF เนื่องจากมุมมองส่วนใหญ่ถูกสร้างขึ้นบนเซิร์ฟเวอร์ ฉันเข้าใจว่าทุกอย่างถูกคอมไพล์บนเซิร์ฟเวอร์ก่อนที่จะส่งไปยังเบราว์เซอร์ แต่ฉันชอบออบเจ็กต์ Java ของฉันที่ส่งคืนข้อมูลที่มุมมองแสดงผลแทนที่จะส่งตรรกะ / ข้อมูลการแสดงผล
Rick

1
เห็นด้วย JSF เป็นสิ่งที่ฝั่งเซิร์ฟเวอร์พร้อมการควบคุม HTML ที่มีประสิทธิภาพ
Plain_Dude_Sleeping_Alone

28

JSF ถูกสร้างขึ้นเพื่อให้ร้านค้า java ไม่ต้องเรียนรู้สิ่งต่างๆเช่น jQuery และสร้าง JS ที่ซับซ้อน แต่มุ่งเน้นไปที่สแต็ก Java ทั้งหมดแทน ในโลกที่เวลาเป็นเงินเป็นทองและมีสถานที่มากมายที่มุ่งเน้นไปที่การพัฒนา Java ภาษา / ชิ้นส่วนน้อยลงหนึ่งภาษาในสแต็กทำให้การฝึกอบรมและการดูแลรักษาเร็วขึ้นและถูกลง

ฉันจะเพิ่มว่า JavaScript เป็นเรื่องง่ายที่จะกลายเป็นฝันร้ายในการบำรุงรักษาสำหรับทีมขนาดใหญ่โดยเฉพาะอย่างยิ่งหากนักพัฒนาบางคนในโครงการไม่เข้าใจเว็บมากนัก


ดังนั้นถ้าฉันค่อนข้างพอใจกับ JQuery JS และอื่น ๆ ฉันไม่จำเป็นต้องมุ่งเน้นไปที่ JSF?
sushil bharwani

2
ทุกอย่างขึ้นอยู่กับปัญหาที่คุณพยายามแก้ไขและทีมที่คุณกำลังแก้ปัญหานั้น
Andrew White

1
ฉันเห็นด้วยกับทีม แต่ฉันสนใจที่จะเรียนรู้ว่า JSF สามารถแก้ปัญหาต่างๆได้อย่างไรและ js jQuery ฯลฯ ไม่สามารถทำได้ แค่พยายามสร้างแรงจูงใจในการเรียนรู้ JSF
sushil bharwani

1
ไม่มีเลยมันเป็นเพียงวิธีอื่นในการแก้ปัญหาเดียวกัน
Andrew White

8
แม้ว่าคุณจะคุ้นเคยกับ JQuery แต่ JSF ก็ยังมีประโยชน์จริงๆ เป็นวิธีง่ายๆในการเชื่อมต่อโค้ดฝั่งเซิร์ฟเวอร์กับการแสดงฝั่งไคลเอ็นต์ 'ส่วนประกอบคอมโพสิต' ของ Facelets บางส่วนเป็นเพียงกระดาษห่อหุ้มที่ค่อนข้างบางรอบ ๆ HTML และ JS (รวมถึง JQuery) พวกเขาสร้างได้ง่ายและโดยทั่วไปเพียงแค่ทำให้วิธีการเชื่อมต่อฝั่งไคลเอ็นต์ - เซิร์ฟเวอร์ทั้งหมดง่ายขึ้น
Arjan Tijms

23

ด้วย Javascript และเฟรมเวิร์กเช่น jQuery คุณจะมีความยืดหยุ่นและการควบคุมเต็มรูปแบบ ด้วย ext's ฯลฯ คุณจะสูญเสียการควบคุมมากและต้องปรับให้เข้ากับกรอบ ด้วย JSF คุณจะสูญเสียการควบคุมโดยสิ้นเชิงและต้องปรับให้เข้ากับกรอบงานทั้งหมด คุณถูกเรียกใช้ในวงจรชีวิต ฯลฯ และในที่สุดคุณก็ไม่สามารถควบคุมได้ว่าจะโทรไปยังเซิร์ฟเวอร์เมื่อใดและไม่สามารถทำได้ หากคุณต้องทำสิ่งที่ถือว่า 'พิเศษ' คุณอยู่ในสถานะที่ยากมาก และในโลก JSF แม้แต่สิ่งพื้นฐานเช่นการจัดเรียงตารางหลายคอลัมน์หรือฟิลด์ที่คุณสามารถพิมพ์ได้เฉพาะชุดอักขระที่ จำกัด (เช่นฟิลด์ตัวเลข) จะถือว่าเป็น 'พิเศษ'

อย่างไรก็ตามยิ่งคุณมีความยืดหยุ่นมากเท่าไหร่คุณก็สามารถทำข้อผิดพลาดหรือแนวทางปฏิบัติที่ไม่ดีได้มากขึ้นเท่านั้น ความยืดหยุ่นสูงใช้งานได้กับโปรแกรมเมอร์ที่ชาญฉลาดเท่านั้นคนอื่น ๆ จะเปลี่ยนโครงการให้กลายเป็นฝันร้ายที่ไม่สามารถจัดการได้

แต่ด้วย JSF และความยืดหยุ่นที่ จำกัด จึงมีวิธีที่ถูกต้องเพียงไม่กี่วิธี (หรือแม้แต่วิธีเดียว) ในการทำบางสิ่ง คุณมีข้อ จำกัด มากคุณไม่สามารถสร้างทางลัดได้คุณต้องเขียน XML เพิ่มเติมเป็นต้น - แต่เมื่อปรับให้เข้ากับมาตรฐานจะมีการควบคุมโค้ดที่ดีกว่าซึ่งโปรแกรมเมอร์ที่ไม่มีประสบการณ์หรือทักษะต่ำจะผลิตได้ ด้วยเหตุนี้ บริษัท ขนาดใหญ่จึงชอบ JSF เพราะปลอดภัยกว่าสำหรับพวกเขา

เมื่อฉันย้ายจาก GWT ไปเป็น JSF ฉันตกใจมากมีกี่สิ่งที่เป็นธรรมชาติสำหรับฉันถือว่าผิดปกติอย่างมากและสิ่งที่เรียบง่ายนั้นยากที่จะบรรลุ ยิ่งไปกว่านั้นแม้จะทำการเปลี่ยนแปลงที่เล็กที่สุดเช่นการเพิ่มเครื่องหมาย ':' หลังจากป้ายกำกับซึ่งในแอปที่ขับเคลื่อนด้วย GWT / jQuery จะเปลี่ยนการสร้างป้ายกำกับฟังก์ชันหนึ่งซึ่งจำเป็นต้องเปลี่ยนไฟล์หลายสิบไฟล์ด้วยคุณสมบัติที่แปลเป็นภาษาท้องถิ่นซึ่งไม่ได้รับการพิจารณาจาก ใครก็ได้ยกเว้นฉันแปลก ...


7
PrimeFaces ขึ้นอยู่กับ jQuery ดังนั้นคุณจึงมีความยืดหยุ่นมากมายในฝั่งไคลเอ็นต์นอกจากนี้ส่วนประกอบของ PrimeFaces ยังมี hooks มากมายบนฝั่งไคลเอนต์และเซิร์ฟเวอร์เป็นคำเรียกกลับของเหตุการณ์เพื่อให้คุณปรับแต่งได้ Javascript API สามารถเขียนทับและ CSS ได้เช่นกันสำหรับรูปลักษณ์ที่กำหนดเอง : label สามารถกำหนดค่าได้ทั่วโลกใน web.xml สำหรับอักขระที่เป็นมิตรกับ jQuery มากขึ้น
Cagatay Civici

1
ตกลง กฎทั่วไปคือการใช้เฟรมเวิร์กไม่จำเป็นต้องมีการเขียนโปรแกรมจาวาสคริปต์ขั้นสูงและจะยากต่อการบำรุงรักษา แต่ให้พลังและความซับซ้อนมากขึ้นอย่างมีนัยสำคัญในขณะที่การพึ่งพาเฟรมเวิร์กจะง่ายต่อการสร้างและบำรุงรักษา แต่จะจำกัดความจุของแอพ
KTys

10

ประโยชน์ของการใช้ JSF ไม่เพียง แต่สร้าง xhtml + css + js เท่านั้น บางครั้ง JSF กำหนดข้อ จำกัด เกี่ยวกับมาร์กอัปที่คุณสามารถสร้างได้เช่นกรอบงานที่ใช้ส่วนประกอบใด ๆ แต่ JSF ไม่ได้เป็นเพียงแค่นั้นเท่านั้น หลังจากตรวจสอบอินพุตแล้วจะสามารถอัปเดตโมเดลและซิงค์ถั่วฝั่งเซิร์ฟเวอร์ของคุณได้โดยไม่ต้องใช้ความพยายามใด ๆ คุณเพียงแค่พูดว่า "สิ่งที่ผู้ใช้พิมพ์ที่นี่ตรวจสอบว่าเป็นตัวเลขหรือไม่ถ้าใช่ให้เก็บไว้ในคุณสมบัติ YY ในออบเจ็กต์ XX" ​​และ JSF จะดำเนินการทั้งหมด

ใช่คุณยังสามารถใช้ JQuery, JS และอื่น ๆ ได้ แต่ JSF ให้ประโยชน์มากมายในการเขียนโค้ดฝั่งเซิร์ฟเวอร์และช่วยคุณประหยัดจากหม้อไอน้ำจำนวนมาก


9

ฉันไม่เห็นด้วยอย่างยิ่งที่ jsf เพิ่มอะไรก็ได้ มันเพิ่มค่าใช้จ่ายเท่านั้น การทำ UI บนเซิร์ฟเวอร์เป็นสิ่งที่ไร้สาระที่สุดเท่าที่เคยได้ยินมา และจาวาสคริปต์สำหรับทีมขนาดใหญ่ก็ใช้งานได้ดีซึ่งเรียกว่าการใช้โค้ดซ้ำ

เพียงแค่ห่อ jquery ไว้ในแท็ก jsp นั่นคือทั้งหมดที่คุณต้องการและคุณทำเสร็จแล้วและอย่าอดทนกับปัญหาห่วงและความสามารถในการปรับขนาดด้วย jsf และ richfaces


14
JSF มุ่งสู่การใช้งานแบบฟอร์ม jQuery เป็นสิ่งที่ดี (heck ไลบรารีคอมโพเนนต์ JSF ยอดนิยมจำนวนมากเช่น PrimeFaces, RichFaces และ IceFaces ยังใช้งานได้ภายใต้ฝาครอบ) แต่ jQuery ไม่ได้ทำให้การส่งแบบฟอร์มการประมวลผลง่ายขึ้นในฝั่งเซิร์ฟเวอร์ แต่อย่างใด การใช้ JSP / Servlet ธรรมดาจะส่งผลให้โค้ดสำเร็จรูปแย่มากเท่านั้น อีกครั้ง JSF ไม่ได้เป็นเพียง HTML / CSS / JS เท่านั้น แต่ยังรวมถึง JSP / Servlet ด้วย
BalusC

2
ฉันคิดว่าถ้าคุณอ่านเพิ่มเติมเกี่ยวกับ JSF โดยทั่วไปและเกี่ยวกับวงจรชีวิตของเพจ JSF โดยเฉพาะคุณอาจเปลี่ยนใจ จากนั้นอีกครั้งคุณอาจไม่
Ahmed Anwar

5

จากการทำงานร่วมกับ JSF, Spring MVC, Struts, Grails, JQuery และ ExtJS ความเห็นของฉันคือ Grails + ExtJS เป็นส่วนผสมที่ทรงพลังอย่างหนึ่ง

ฉันจะเลือก Grails มากกว่า JSF ทุกวัน ฉันชอบความสมบูรณ์ของ ExtJS ในฐานะเฟรมเวิร์กและไลบรารีฝั่งไคลเอ็นต์ แต่มันมาพร้อมกับเส้นโค้งการเรียนรู้ที่สูงกว่า JQuery


3

ความแตกต่างที่ใหญ่ที่สุดระหว่าง jQuery และ JSF มีดังนี้

  • ไม่มีสถาปัตยกรรม MVC
  • ไม่มีการควบคุมสถานะ (จัดเก็บวันที่ในเซสชันหรือการสนทนาล้างข้อมูลอัตโนมัติ ฯลฯ )
  • ไม่มีไลบรารีการตรวจสอบความถูกต้อง (ค่าเริ่มต้น)
  • ไม่มีไลบรารีเทมเพลต
  • ไม่มีการนำทาง / เส้นทางขั้นสูง
  • ด้านลูกค้า

jQuery ไม่เคยมีวัตถุประสงค์เพื่อใช้เป็นเว็บเฟรมสแต็กแบบเต็ม มีจุดมุ่งหมายเพื่อแทนที่โค้ด JS ระดับต่ำเพื่อให้การเขียน JS ง่ายขึ้นและมีประสิทธิภาพมากขึ้นโดยใช้โค้ดน้อยลง

และส่วนใหญ่ควรใช้เพื่อเพิ่มพฤติกรรมในองค์ประกอบ HTML


2

เมื่อใช้เฟรมเวิร์ก ExtJS สำหรับเว็บแอปพลิเคชันขนาดใหญ่ฉันรู้ว่ามันใช้งานง่ายแค่ไหน ExtJS (Schena) เหมาะที่สุดสำหรับการโต้ตอบฐานข้อมูล (Oracle 11g) ในสถาปัตยกรรม MVC มุมมองมีไว้สำหรับการโต้ตอบด้วยภาพ / ผู้ใช้ คอนโทรลเลอร์ระบุ 'การประมวลผล' และทริกเกอร์ที่จำเป็นต้องใช้ในรูปแบบแพ็คเกจ PLSQL (API สำหรับ CRUD, SQL select queries เป็นต้น) โมเดลและไฟล์ที่จัดเก็บถูกใช้เพื่อ 'แมป' รายการข้อมูลกับ Viewer / inputs

ExtJS ไม่เหมาะสำหรับเว็บอินเตอร์เฟสที่ไม่ใช่ฐานข้อมูลแบบเข้มข้น - โดยที่ Angular JS อาจเหมาะสมกว่า

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.