Descobri o que está causando este problema ao renderizar o rich:panel. É meio bizarro... mas é isso ae... rs
Vou demorar um pouquinho para explicar, mas se tiverem paciencia ^^
Estou utilizando um PhaseListener para essa minha tela de login. Ele está assim:
public class AuthorizationListener implements PhaseListener {
public void afterPhase(PhaseEvent event) {
System.out.println("afterPhase: " + event.getPhaseId());
FacesContext facesContext = event.getFacesContext();
String currentPage = facesContext.getViewRoot().getViewId();
System.out.println("currentPage: " + currentPage);
boolean isLoginPage = (currentPage.lastIndexOf("/login.xhtml") > -1);
boolean isRichFacesPage = (currentPage.lastIndexOf("/css/") > -1);
HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(true);
Object currentUser = session.getAttribute("currentUser");
System.out.println("isLogin? " + isLoginPage);
System.out.println("isRich? " + isRichFacesPage);
System.out.println("currentUser: " + currentUser);
if (!isRichFacesPage && !isLoginPage && currentUser == null) {
System.out.println("==========Redirecionar usuário==========");
NavigationHandler nh = facesContext.getApplication().getNavigationHandler();
nh.handleNavigation(facesContext, null, "login");
}
}
public void beforePhase(PhaseEvent event) {
}
public PhaseId getPhaseId() {
return PhaseId.ANY_PHASE;
}
}
Tirei daqui,
http://www.rodrigolazoti.com.br/?p=56.
(ele já está alterado para solução que eu pensei).
O que acontece é que quando eu acabo de abrir uma página que nunca foi aberta no cliente, o richfaces executa algumas fases para carregar o css de seus componentes, e na verificação
"if (!isLoginPage && currentUser == null) {"
ele retorna true, pois isLoginPage vai ser false (negando fica true) e currentUser está como null.
currentUser é um atributo de sessão que só vai ser setado com o nome do usuário após o usuário e senha estarem corretos.
Voltando... como a verificação é true ele redireciona para a página de login novamente impedindo o richfaces de passar por estas páginas.
Para resolver esse problema eu acrescentei mais uma verificação isRichFacesPage que verifica se é uma página de css do richfaces. Se for, ele não vai redirecionar evitando o problema da skin do rich:panel.
Para entender melhor é só dar uma olhada no "debug" que eu fiz, que mostraria algo do tipo:
afterPhase: RESTORE_VIEW 1
currentPage: /login.xhtml
isLogin? true
isRich? false
currentUser: null
afterPhase: RENDER_RESPONSE 6
currentPage: /login.xhtml
isLogin? true
isRich? false
currentUser: null
afterPhase: RESTORE_VIEW 1
currentPage: /org/richfaces/renderkit/html/css/basic_both.xcss
isLogin? false
isRich? true
currentUser: null
afterPhase: RENDER_RESPONSE 6
currentPage: /org/richfaces/renderkit/html/css/basic_both.xcss
isLogin? false
isRich? true
currentUser: null
afterPhase: RESTORE_VIEW 1
currentPage: /css/panel.xcss
isLogin? false
isRich? true
currentUser: null
afterPhase: RENDER_RESPONSE 6
currentPage: /css/panel.xcss
isLogin? false
isRich? true
currentUser: null
Enfim... se alguém tiver uma solução mais elegante ou até uma explicação melhor para isto, me avise por favor.
Considerem problema resolvido (tem como add isso no titulo do tópico?)
Obrigado.