ใช้ CDI
เป็นต่อ JSF 2.3 @ManagedBeanจะเลิก โปรดดูปัญหาข้อมูลจำเพาะ 1417ด้วย ซึ่งหมายความว่ามีไม่ได้อีกต่อเหตุผลที่จะเลือกมากกว่า@ManagedBean @Namedสิ่งนี้ถูกนำมาใช้ครั้งแรกใน Mojarra 2.3.0 เบต้าเวอร์ชัน m06

ประวัติศาสตร์
ความแตกต่างที่สำคัญ@ManagedBeanคือได้รับการจัดการโดยเฟรมเวิร์ก JSF และ@ManagedPropertyสามารถใช้ได้กับถั่วที่มีการจัดการ JSF อื่นเท่านั้น @Namedมีการจัดการโดยแอพพลิเคชันเซิร์ฟเวอร์ (คอนเทนเนอร์) ผ่านกรอบ CDI และผ่านทาง@Injectที่มีอยู่กับชนิดของภาชนะสิ่งประดิษฐ์ที่มีการจัดการเช่นใด@WebListener, @WebFilter, @WebServlet, @Path, @Statelessฯลฯ และแม้กระทั่ง @ManagedBeanJSF จากด้านอื่น ๆ ที่@ManagedPropertyไม่ได้ทำงานอยู่ภายใน@Namedหรืออื่น ๆ ใด ๆ สิ่งประดิษฐ์ภาชนะที่มีการจัดการ ใช้งานได้จริงเฉพาะภายใน@ManagedBeanจริงๆมันทำงานเฉพาะภายใน
ความแตกต่างอีกประการหนึ่งคือจริงๆแล้ว CDI จะฉีดพร็อกซีที่มอบหมายให้กับอินสแตนซ์ปัจจุบันในขอบเขตเป้าหมายตามคำขอ / เธรด (เช่นเดียวกับวิธีการฉีด EJB) กลไกนี้จะช่วยให้การฉีดถั่วขอบเขตแคบในถั่วของขอบเขตที่กว้างขึ้นซึ่งเป็นไปไม่ได้กับ @ManagedPropertyJSF JSF "ฉีด" อินสแตนซ์จริงที่นี่โดยตรงโดยเรียกใช้ตัวตั้งค่า (นั่นคือเหตุผลที่ต้องใช้ตัวตั้งค่าในขณะที่ไม่จำเป็นต้องใช้ด้วย@Inject)
แม้ว่าจะไม่เสียเปรียบโดยตรง แต่ก็มีวิธีอื่น - ขอบเขตของ@ManagedBeanมันมี จำกัด จากมุมมองอื่น ๆ หากคุณไม่ต้องการเปิดเผย "มากเกินไป" @Injectคุณสามารถเก็บถั่วที่มีการจัดการ@ManagedBeanไว้ได้ มันเหมือนเมื่อเทียบกับprotected publicแต่นั่นไม่นับจริงๆ
อย่างน้อยใน JSF 2.0 / 2.1 ข้อเสียที่สำคัญของการจัดการถั่วสำรอง JSF โดย CDI คือไม่มี CDI เทียบเท่ากับ@ViewScopedไฟล์. เข้า@ConversationScopedมาใกล้ แต่ยังคงต้องเริ่มต้นและหยุดด้วยตนเองและต่อท้ายcidพารามิเตอร์คำขอที่น่าเกลียดเพื่อผลลัพธ์ URL MyFaces CODI ช่วยให้ง่ายขึ้นโดยการเชื่อม JSF javax.faces.bean.ViewScopedกับ CDI อย่างโปร่งใสเต็มที่เพื่อให้คุณสามารถทำได้@Named @ViewScopedแต่จะต่อท้ายwindowIdพารามิเตอร์คำขอที่น่าเกลียดเพื่อผลลัพธ์ URL รวมทั้งในการนำทางแบบหน้าต่อหน้าของวานิลลาธรรมดา OmniFacesแก้ไขทั้งหมดนี้ด้วย CDI จริง@ViewScopedซึ่งเชื่อมโยงขอบเขตของ bean กับสถานะมุมมอง JSF แทนที่จะเป็นพารามิเตอร์การร้องขอโดยพลการ
JSF 2.2 (ซึ่งเผยแพร่ 3 ปีหลังจากคำถาม / คำตอบนี้) นำเสนอ@ViewScopedคำอธิบายประกอบใหม่ที่เข้ากันได้กับ CDI ในรูปแบบjavax.faces.view.ViewScoped. JSF 2.2 ยังมาพร้อมกับ CDI เท่านั้น@FlowScopedซึ่งไม่มี@ManagedBeanเทียบเท่าดังนั้นจึงผลักผู้ใช้ JSF ไปสู่ CDI ความคาดหวังคือ@ManagedBeanและเพื่อน ๆ จะเลิกใช้งานตาม Java EE 8 หากคุณยังคงใช้@ManagedBeanงานอยู่ขอแนะนำอย่างยิ่งให้เปลี่ยนไปใช้ CDI เพื่อเตรียมพร้อมสำหรับเส้นทางการอัปเกรดในอนาคต CDI พร้อมใช้งานในคอนเทนเนอร์ที่เข้ากันได้กับ Java EE Web Profile เช่น WildFly, TomEE และ GlassFish สำหรับ Tomcat คุณต้องติดตั้งแยกต่างหากเหมือนกับที่คุณทำกับ JSF ดูวิธีการติดตั้ง CDI ใน Tomcat