เมื่อใดควรใช้เหตุการณ์ f: viewAction หรือ preRenderView เพื่อเริ่มต้นข้อมูลสำหรับข้อหน้าโดยใช้คำอธิบายประกอบ @PostConstruct
ใช้<f:viewAction>เมื่อคุณต้องการเรียกใช้เมธอดก่อนที่ HTML จะถูกแสดงผล สิ่งนี้มีประโยชน์อย่างยิ่งหากคุณต้องการดำเนินการตามค่าแบบจำลองที่กำหนดโดย<f:viewParam>ในระหว่างขั้นตอนการอัปเดตค่าโมเดล กล่าวคือไม่สามารถใช้งานได้ในขณะที่@PostConstructวิ่ง ใน JSF 2.0 / 2.1 ไม่มีแท็กนี้และคุณต้องใช้preRenderViewวิธีแก้ปัญหาชั่วคราว
ถ้าถั่วสำรองคือ @RequestScoped พวกเขาจะทำสิ่งเดียวกันได้อย่างมีประสิทธิภาพหรือไม่? (แล้วมันขึ้นอยู่กับตัวเลือกของนักพัฒนาหรือเปล่า (@PostConstruct ดูเหมือน "สะอาดกว่า")
ไม่พวกเขาไม่ได้ทำสิ่งเดียวกันอย่างมีประสิทธิภาพอย่างแน่นอน @PostConstructเป็น intented เพื่อดำเนินการโดยตรงหลังจากการก่อสร้างถั่วและการตั้งค่าการอ้างอิงฉีดทั้งหมดและมีการจัดการคุณสมบัติเช่น@EJB, @Inject, @ManagedPropertyฯลฯ คือการพึ่งพาการฉีดจะไม่สามารถใช้ได้ภายในคอนสตรัคถั่ว ซึ่งจะทำงานเพียงครั้งเดียวต่อการดูเซสชันหรือแอปพลิเคชันเมื่อ bean ถูกดูเซสชันหรือขอบเขตของแอปพลิเคชัน <f:viewAction>เป็นค่าเริ่มต้นเรียกเฉพาะใน GET ขอเริ่มต้น แต่สามารถผ่านonPostback="true"แอตทริบิวต์กำหนดค่าที่จะเรียกร้องขอ postback เช่นกัน preRenderViewเหตุการณ์ถูกเรียกตามคำขอ HTTP ทุก (ใช่นี้ยังรวมถึงการร้องขอของอาแจ็กซ์)
สรุปการใช้งาน@PostConstructถ้าคุณต้องการที่จะดำเนินการในการอ้างอิงฉีดและคุณสมบัติการจัดการที่ถูกกำหนดโดย@EJB, @Inject, @ManagedPropertyฯลฯ ในระหว่างการก่อสร้างถั่ว ใช้<f:viewAction>ถ้าคุณยัง<f:viewParam>ต้องการที่จะดำเนินการเกี่ยวกับคุณสมบัติที่กำหนดโดย หากคุณยังใช้ JSF 2.0 / 2.1 ให้ใช้preRenderViewแทน<f:viewAction>ไฟล์. คุณสามารถเพิ่มการตรวจสอบได้หากจำเป็นFacesContext#isPostback()เพื่อดำเนินpreRenderViewการตามคำขอเริ่มต้นเท่านั้น
ดูสิ่งนี้ด้วย: