3

各ビューで認証を確認しようとしています

<f:event type="preRenderView" listener="{#loginControl.checkAuthentication}" /> 

鬼ごっこ。

メカニズムは機能しますが、ルックアンドフィールが壊れており、CSSが欠落しているようです。チェックを外すと、ページが正しく表示されます。

これは私の見解の1つであり、認証を確認します。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui">
<f:event listener="#{loginControl.checkAuthorization}" type="preRenderView" />
<h:head>
...

次のメソッドが呼び出されます。

public void checkAuthorization(ComponentSystemEvent evt){
  FacesContext ctx = FacesContext.getCurrentInstance();
  ConfigurableNavigationHandler nav = (ConfigurableNavigationHandler)      
  ctx.getApplication().getNavigationHandler();

  // navigate to login-screen
  if(this.user==null){          
   nav.performNavigation("login");
  } else {
   nav.performNavigation("welcome");
  }
}

出力は次のとおりです。

http://www.convince-it.de/Auswahl_002.jpeg

http://www.convince-it.de/Auswahl_003.jpeg

ご覧のとおり、認証を確認すると、コンポーネントが適切にレンダリングされません。最初の画像は、認証チェックを有効にして生成されたビューのスクリーンショットです。2番目のビューは、認証チェックなしでレンダリングされたビューですが、必要な外観になっています。

何か案は?

4

1 に答える 1

5

プリレンダー中にナビゲーション ハンドラーによってビューが変更された場合、必要な PrimeFaces CSS/JS を追加/変更できなかったようです。

転送の代わりにリダイレクトを送信することをお勧めします。

if (user == null) {          
    nav.performNavigation("login?faces-redirect=true");
} else {
    nav.performNavigation("welcome?faces-redirect=true");
}
于 2012-06-19T16:28:00.593 に答える