Oi, este é meu primeiro post.
Estou aprendendo JSF 2.0 e estou desenvolvendo um controle de acesso que restrinja acesso tanto as páginas quanto aos componentes visuais. Um dos requisitos é que o desenvolvedor não tenha que configurar as regras de acesso nas páginas. As permissões serão baseadas nos ids dos componentes.
Construí um Phase Listener para interceptar a fase “Restore View” e dentro do método afterPhase estou colocando a lógica de autenticação (verificar se usuário está logado) e autorização (verificar se o usuário pode ver a página e setar o atributo rendered como false para os componentes aos quais ele não tiver acesso).
if (sa.canUserAccessPage(userId, reqPageName)){
for(UIComponent component : fc.getViewRoot().getChildren()){
if (!sa.canUserAccessComponent(userId, reqPageName, component.getId())){
setInvisible(component);
}
}
O problema é que quando chamo fc.getViewRoot().getChildren(), a lista resultante possui apenas um componente do tipo UIInstructions.
O toString desse componente é: <?xml version='1.0' encoding='UTF-8' ?>.
A página que estou tentando acessar é:
<?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:h="http://java.sun.com/jsf/html">
<h:head>
<title>Protected Page</title>
</h:head>
<h:body>
<h:outputText id="txb_msg1" value="Protected message one." title="Msg one"/> <br/><br/>
<h:outputText id="txb_msg2" value="Protected message two." title="Msg two"/> <br/><br/>
<h:button id="btn_one" value="Button one" title="Button one"/>
</h:body>
</html>
O que estou errando? Em qual fase do ciclo de vida posso ter acesso a todos os componentes de uma página?