Escondendo componentes de tela

Top  Previous  Next

Escondendo componentes de tela

 

       A opção de desabilitar componentes em tela para certos perfis de usuário agora está disponível no novo MentorWeb também. Para esconder os componentes, primeiro é necessário clicar com o botão direito no elemento e selecionar a opção Inspecionar Elemento (no Firefox ou IE) ou Inspencionar (no Chrome).

 

img1

 

       Depois, é preciso localizar o id do elemento e dar um duplo clique nele e copiá-lo.

 

img2

 

       Em seguida, ir no Security e na opção Perfil Usuário, selecionar para qual perfil de usuário e para qual módulo, dentro daquele perfil, o campo será escondido.

 

img3

 

       Agora, pressionar o botão direito em cima em qual opção de menu daquele módulo está localizado o elemento a ser escondido e selecionar a opção “Outras opções”.

img4

       Colar o id copiado no passo 2, na área de texto “Objetos que serão escondidos na tela”. Atenção: Não será todo o id que será posto nesse TextArea, apenas o que vier depois do “formPrincipal:”!.

 

       Agora, é necessário gravar tanto na modal quanto na tela principal do Security.

 

img5

img6

 

       Pronto. Agora todos os usuários daquele perfil não poderão mais visualizar o elemento em questão.

 

img7

 

       Detalhes técnicos

 

       Para verificar quais componente serão escondidos, é chamado um método do ComponenteUtil, o trataVisibilidadeComponente, em todo encodeBegin() dos componentes. Esse método é subscrito das classes de componentes do PrimeFaces e é chamado na hora de renderizar os componentes em tela. Esse método retornará true ou false, dependendo se o componente em questão será ou não renderizado. Para verificar isso, ele chama um método do PermissaoDTO, que percorre todos os componentes do mapa de componentes a esconder e tenta achar o componente atual no mapa pelo Id do componente. Caso ele ache o Id, é chamado um método dentro do FacesUtil chamado esconderObjetos. No esconderObjetos, ele recupera o componente pelo seu Id e caso ele não seja null, o componente não será renderizado em tela. Ainda é feito uma verificação, caso ele possua filhos, é chamado o método esconderFilhos, que irá setar o rendered de todos os filhos do componente e de todos os filhos dos filhos do componente de forma recursiva.

 

       Considerações

 

         • Para esconder mais de um componente, separá-los com uma quebra de linha;

       • Se o componente não for escondido, tente atualizar a página com um Ctrl F5;

         • Não é possível esconder colunas de uma tabela corretamente;

         • O Tab não está sendo possível ser escondido. Quando eu tento setá-lo para esconder, por mais que o isRendered dele esteja como false, ele continua aparecendo. Provavelmente é alguma regra interna de como o componente funciona, porque mesmo setando o valor dele para esconder de forma “bruta”, ele continua não escondendo, mas os filhos dele somem, ficando apenas a aba do tab; Ver imagens para clarificação:

consid1

consid2

       • Alguns componentes estão com o valor nomedocomponenteInputLabel ou similares. Nesses casos, é necessário pegar só o nome do componente, deixando de fora o InputLabel;

         • Não é possível esconder o filtro acadêmico. Visto que se fosse escondê-lo, acabaria quebrando vários componentes de tela que dependem dele para recuperar os seus valores.