JSF

2011-12-06 26 views
12

'daki koşullu yönlendirme, başka bir görünüme koşullu olarak yeniden yönlendirmek için bir yerleşik mekanizma var mı? Kullanıcının oturum açmış olduğu giriş sayfasından "ana sayfa" sayfasına yönlendirilmesini istiyorum.JSF

Zaten iki temel yaklaşımım var, ancak ilk önce nasıl elde edileceğine dair bir fikrim yok. İkincisi, kirli bir çözümdür.

  1. (EL: #{login.loggedIn}) <meta http-equiv="Refresh" content="0; URL=home.jsf" /> ekleyin ve şartlı hale izin
  2. yönlendirmesi yaparak bazı JavaScript içeren, ayrıca koşullu hale olacak <h:panelGroup /> ekleyin.

veya başka bir daha zarif çözüm elde etmek için bir yol var mı? :-)

Teşekkür

cevap

18

Bunun için <f:event type="preRenderView"> kullanabilirsiniz.

E.g.

public void checkAlreadyLoggedin() throws IOException { 
    if (isLoggedIn()) { 
     ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext(); 
     ec.redirect(ec.getRequestContextPath() + "/home.xhtml"); 
    } 
} 
+0

Perfect! Bir charme gibi çalışır, teşekkürler. Bu arada başka bir yaklaşım keşfettim ve denedim: Sayfada yalnızca kayıt için kayıtlı bir süzgeç uyguladım, ancak '@ SessionScoped' 'oturum açma fasulyesi ya da 'Kullanıcı' tarafından yönetilemediğinden başarısız oldu . Seans boştu ...?! – Kai

+0

Bu filtre yalnızca bir JSI '@ Adlandırılmış fasulye için değil, JSF' @ ManagedBean' için çalışacaktır. – BalusC

+0

Ah, Tamam! Bunun bir şekilde JEE konteyner tarafından güvence altına alınacağını düşündüm ... – Kai

0

durumunda görünümü 'home.xhtml' çalışmıyor @BalusC tarafından belirlenen çözüm ile

<f:event type="preRenderView" listener="#{login.checkAlreadyLoggedin}" /> 

MTU portletinin varsayılan görünümü değildir. Oluşturma aşamasında varsayılan olmayan bir görünüme yönlendirmesi gerekenler için, this entry içinde belirtilen çözümü öneririm. Yani, preRenderView yöntemi içinde aşağıdakileri yapın edilir:

FacesContext fc = FacesContext.getCurrentInstance(); 
NavigationHandler navigationHandler = fc.getApplication().getNavigationHandler(); 
navigationHandler.handleNavigation(fc, null, "/views/nonDefaultView.xhtml?faces-redirect=true"); 
fc.renderResponse(); 

Krediler @Frizz1977