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).
Depois, é preciso localizar o id do elemento e dar um duplo clique nele e copiá-lo.
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.
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”. 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.
Pronto. Agora todos os usuários daquele perfil não poderão mais visualizar o elemento em questão.
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: • 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.
|