เมื่อใดควรใช้เหตุการณ์ 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
การตามคำขอเริ่มต้นเท่านั้น
ดูสิ่งนี้ด้วย: