[Resolvido] URL em menus - primefaces

16 respostas
A

E ae galera,

Estou criando um menu dinâmico em meu projeto.
No momento de montar o menu eu dou um setUrl. Ele monta o menu tudo certinho.

O problema é que quando eu clico a primeira vez no menuItem, ele chama a URL correta isso porque estou na raiz de minha aplicação.
Agora quando eu clico em um outro menuItem, ele mantem a URL que ele chamou e adiciona a nova na frente ficando assim:

1 - URL inicial
http://localhost:8080/projeto/

2 - URL com primeira chamada
http://localhost:8080/projeto/cadastro/pessoa.xhtml

3 - URL com segunda chamada
http://localhost:8080/projeto/cadastro/cadastro/imovel.xhtml

Acredito que a solução seria resgatar a URL inicial e montar a nova.
Alguém sugere algo?

16 Respostas

V

eita cara eu fiz isso, mas o código tá em casa e no momento estou no trabalho.

A

Assim resolve:

ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
    HttpServletRequest request = ((HttpServletRequest) context.getRequest());

            MenuItem mi = new MenuItem();
            mi.setValue(m.getNome());
            mi.setUrl(request.getContextPath()+m.getUrl());

Se alguém tiver alguma sugestão, até mesmo para ocultar o endereço completo.

aprendiz.devel:
E ae galera,

Estou criando um menu dinâmico em meu projeto.
No momento de montar o menu eu dou um setUrl. Ele monta o menu tudo certinho.

O problema é que quando eu clico a primeira vez no menuItem, ele chama a URL correta isso porque estou na raiz de minha aplicação.
Agora quando eu clico em um outro menuItem, ele mantem a URL que ele chamou e adiciona a nova na frente ficando assim:

1 - URL inicial
http://localhost:8080/projeto/

2 - URL com primeira chamada
http://localhost:8080/projeto/cadastro/pessoa.xhtml

3 - URL com segunda chamada
http://localhost:8080/projeto/cadastro/cadastro/imovel.xhtml

Acredito que a solução seria resgatar a URL inicial e montar a nova.
Alguém sugere algo?

A

Opa Valeio Bezerra,

Só vi sua mensagem depois que já tinha enviado.
Então, eu busquei em alguns lugares e só achei essa forma de fazer, funcionou legal, é mais ou menos parecida com a sua solução?

Estou buscando uma maneira de esconder a URL completa do usuário, conhece alguma maneira?

Valeu amigo,

Valeio Bezerra:
eita cara eu fiz isso, mas o código tá em casa e no momento estou no trabalho.

V

Eu acho que é parecida sim, por que você ta querendo, para ele não burlar as permissões ?

A

Não, isso seria mais um capricho mesmo, e também reforçar um pouco mais a segurança.
Para permissões estou utilizando o Spring Security.
Nesse momento estou adaptando o Spring Security no menu dinâmico, tu usa ele também?

V

Não, eu fiz na mão mesmo rs. Até por que vou usar dialogs e não vou redirecionar, quer dizer, eu pretendo, vou ver se vai dá certo rs.

A

Hum, bacana.

Não sei se já conhece esse framework, eu acabei conhecendo ele faz pouco tempo e está sendo bem proveitoso.
Esse link tem um tutorialzinho bem bacana, caso se interessar.

http://jamacedo.com/2011/01/crud-jsf-2-parte-3-seguna-com-spring-security-3/

V

Conheci é bom até, mas não gostei muito, por que eu queria que as permissões do usuário que vou usar é dinâmica, tipo, um usuário pode ter acesso a 3 telas, onde só pode incluir, outro tem a 50 e por ai vai, não definido por “ROLE_ADMIN” essas coisas, por isso optei por não usar o spring.

A

Hum,

Então, eu preciso disso também.
Estou fazendo algumas adaptações, só que as regras são por telas, no meu caso estou chamando de ‘casos de uso’.
Aí fica:

ROLE_CADASTRO_PESSOA
ROLE_CADASTRO_BEM
ROLE_CADASTRO_MAQUINA

Até que está caminhando, vamos ver no que da.

V

Eu pensei nisso o problema é que no futuro quem sabe pode ser que tenha diversos módulos, contas a pagar, a receber, estoque entre outros, ai vai ficar muita coisa por isso eu faço tudo isso na mão, tenho cadastro de módulos, programas e autorizações de usuário.

A

Uhum, entendo.

Eu já tive oportunidade de trabalhar com um ERP gigantesco, era utilizado esse controle que você comenta.
Realmente, é mais prático pois o controle pode até ficar na mão do usuário.

Mas assim, levantando alguns problemas que identifiquei nesse caso.

  • Se caso o usuário conheça a URL de uma tela, como vai controlar o seu acesso sem ser pelo menu?
V

Tá dando trabalho no começo, mas depois de pronto é só desenvolver as novas telas e pronto, não vou ter mais nenhum trabalho com códigos, já com spring no seu caso toda vez que fizer uma nova vai ter que botar um “ROLE_CADASTRO_TELAX”.

V

aprendiz.devel:
Uhum, entendo.

Eu já tive oportunidade de trabalhar com um ERP gigantesco, era utilizado esse controle que você comenta.
Realmente, é mais prático pois o controle pode até ficar na mão do usuário.

Mas assim, levantando alguns problemas que identifiquei nesse caso.

  • Se caso o usuário conheça a URL de uma tela, como vai controlar o seu acesso sem ser pelo menu?

Eu tenho um classe PadraoBean onde meus beans herdam dele, cada tela que eu faço tem seu código, eu passo pelo construtor o parâmetro e o padraoBean verifica se ele tem autorização, se não tiver ele redireciona dizendo que não tem acesso, se o usuário não tiver logado ele vai pra pagina de login.

Exemplo:

public class ClienteBean() extends PadraoBean {
  public ClienteBean() {
    super("codigoModulo", "codigoPrograma"); 
  }

}
V

Mas agora como cada tela que abro é um dialog não vou precisar mais disso, mas mesmo assim eu deixei.

A

Bacana Valeio Bezerra.
Vou ver no que da com o Spring Security…

valeu pelas sugestões aí amigo

Valeio Bezerra:
aprendiz.devel:
Uhum, entendo.

Eu já tive oportunidade de trabalhar com um ERP gigantesco, era utilizado esse controle que você comenta.
Realmente, é mais prático pois o controle pode até ficar na mão do usuário.

Mas assim, levantando alguns problemas que identifiquei nesse caso.

  • Se caso o usuário conheça a URL de uma tela, como vai controlar o seu acesso sem ser pelo menu?

Eu tenho um classe PadraoBean onde meus beans herdam dele, cada tela que eu faço tem seu código, eu passo pelo construtor o parâmetro e o padraoBean verifica se ele tem autorização, se não tiver ele redireciona dizendo que não tem acesso, se o usuário não tiver logado ele vai pra pagina de login.

Exemplo:

public class ClienteBean() extends PadraoBean {
  public ClienteBean() {
    super("codigoModulo", "codigoPrograma"); 
  }

}

A

Ah, o dialog é outra coisa mesmo.

Acabei de resolver aquele problema da URL de forma mais elegante.
Se colocar ‘/’ antes da string ele renderiza de forma diferente, aí funciona direitinho.

Parece que foi agora.

Criado 26 de abril de 2013
Ultima resposta 26 de abr. de 2013
Respostas 16
Participantes 2