Kapan sebaiknya seseorang menggunakan peristiwa f: viewAction atau preRenderView untuk menginisialisasi data untuk ayat halaman menggunakan anotasi @PostConstruct?
Gunakan <f:viewAction>saat Anda ingin menjalankan metode sebelum HTML dirender. Ini sangat berguna jika Anda ingin melakukan tindakan berdasarkan nilai model yang disetel <f:viewParam>selama fase nilai model pembaruan. Yakni, mereka tidak tersedia saat @PostConstructdijalankan. Di JSF 2.0 / 2.1, tag ini tidak ada dan Anda harus menggunakan preRenderViewsolusinya.
Jika kacang latar adalah @RequestScoped, apakah mereka secara efektif melakukan hal yang persis sama? (lalu terserah pilihan pengembang? (@PostConstruct sepertinya "lebih bersih").
Tidak, mereka pasti tidak melakukan hal yang sama secara efektif. The @PostConstructintented untuk melakukan tindakan langsung setelah konstruksi kacang dan pengaturan dari semua dependensi disuntikkan dan properti yang dikelola seperti @EJB, @Inject, @ManagedProperty, dll Yaitu, dependensi disuntikkan tidak tersedia di dalam konstruktor kacang. Dengan demikian ini akan berjalan hanya sekali per tampilan, sesi atau aplikasi ketika kacang adalah tampilan, sesi atau aplikasi yang tercakup. Secara <f:viewAction>default, is hanya dipanggil pada permintaan GET awal, tetapi dapat via onPostback="true"atribut dikonfigurasi untuk dipanggil pada permintaan postback juga. The preRenderViewevent dipanggil pada setiap permintaan HTTP (ya, ini juga termasuk permintaan ajax!).
Diringkas, penggunaan @PostConstructjika Anda ingin melakukan tindakan pada dependensi disuntikkan dan properti yang dikelola yang ditetapkan oleh @EJB, @Inject, @ManagedProperty, dll selama konstruksi kacang. Gunakan <f:viewAction>jika Anda juga ingin melakukan tindakan pada properti yang disetel oleh <f:viewParam>. Jika Anda masih di JSF 2.0 / 2.1, menggunakan preRenderViewbukan <f:viewAction>. Anda dapat jika perlu menambahkan centang FacesContext#isPostback()untuk melakukan preRenderViewtindakan hanya berdasarkan permintaan awal.
Lihat juga: