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 @PostConstruct
dijalankan. Di JSF 2.0 / 2.1, tag ini tidak ada dan Anda harus menggunakan preRenderView
solusinya.
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 @PostConstruct
intented 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 preRenderView
event dipanggil pada setiap permintaan HTTP (ya, ini juga termasuk permintaan ajax!).
Diringkas, penggunaan @PostConstruct
jika 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 preRenderView
bukan <f:viewAction>
. Anda dapat jika perlu menambahkan centang FacesContext#isPostback()
untuk melakukan preRenderView
tindakan hanya berdasarkan permintaan awal.
Lihat juga:
@Param
: "Untuk parameter permintaan HTTP pada dasarnya seperti itu<f:viewParam>
, tetapi dengan perbedaan utama bahwa parameter yang diinjeksi tersedia secara langsung selama@PostConstruct
, memungkinkan cara pemrosesan yang jauh lebih mudah tanpa perlu<f:event type="preRenderView">
atau<f:viewAction>
di melihat."Apakah Anda perlu menginisialisasi properti kacang yang dikelola? -> Lalu, gunakan @ PostConstruct Jika tidak, apakah Anda perlu bekerja dengan params yang diteruskan dari tampilan lain? -> Lalu, gunakan " preRenderView "
sumber