Pertanyaan JSF mengarahkan ulang pada pemuatan halaman


Pertanyaan singkat: Apakah mungkin untuk melakukan redirection, katakan ketika seorang pengguna tidak login, ketika halaman dirender?


4
2018-03-05 10:59


asal


Jawaban:


Untuk itu kamu harus Gunakan Filter.

Misalnya.

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException { 
    if (((HttpServletRequest) request).getSession().getAttribute("user") == null) {
        ((HttpServletResponse) response).sendRedirect("error.jsf"); // Not logged in, so redirect to error page.
    } else {
        chain.doFilter(request, response); // Logged in, so just continue.
    }
}

Di sini saya berasumsi bahwa User ditempatkan dalam lingkup sesi seperti yang biasanya Anda harapkan. Ini bisa menjadi sesi scoped JSF yang dikelola kacang dengan nama user.

Aturan navigasi tidak berlaku karena tidak ada cara "aksi kacang" selama normal GET permintaan. Juga melakukan redirect ketika kacang yang dikelola akan segera dibangun tidak bekerja, karena ketika kacang yang dikelola akan dibangun selama normal GET permintaan, tanggapan sudah mulai render dan itu adalah titik tidak kembali (Itu hanya akan menghasilkan IllegalStateException: response already committed). Sebuah PhaseListener rumit dan luar biasa karena Anda sebenarnya tidak perlu mendengarkan pada fase JSF apa pun. Anda hanya ingin mendengarkan permintaan HTTP "polos" dan keberadaan objek tertentu dalam lingkup sesi. Untuk itu Filter sempurna.


9
2018-03-05 11:35



Iya nih:

if(!isLoggedIn) {
FacesContext.getCurrentInstance().getExternalContext().redirect(url);
}

3
2018-03-05 11:02



Anda bisa menggunakan PhaseListener untuk menentukan kapan Anda ingin melakukan redirection.


1
2018-03-05 11:06



Di sebuah PhaseListener mencoba:

FacesContext ctx = FacesContext.getCurrentContext();
ctx.getApplication().getNavigationHandler()
     .handleNavigation(ctx, null, "yourOutcome");

1
2018-03-05 12:19