Rendered Primefaces

14 respostas
tiago.frioli

Olá Pessoal tudo bem?

É o seguinte, eu criei duas caixas de login uma para administrador e outra para usuário comum que apos logarem direcionam para uma mesma pagina (pagina1.xhtml).

Nesta pagina tem uma menu do primefaces:

<p:menubar> <p:submenu label="File" icon="ui-icon-document"> <p:submenu label="New" icon="ui-icon-contact"> <p:menuitem value="Project" url="#" /> <p:menuitem value="Other" url="#" /> </p:submenu> <p:menuitem value="Open" url="#" /> <p:separator /> <p:menuitem value="Quit" url="#" /> </p:submenu> <p:submenu label="Edit" icon="ui-icon-pencil"> <p:menuitem value="Undo" url="#" icon="ui-icon-arrowreturnthick-1-w" /> <p:menuitem value="Redo" url="#" icon="ui-icon-arrowreturnthick-1-e" /> </p:submenu>

Eu gostaria de travar por exemplo a parte do menu “EDIT” para quando um usuario comum logado pelo caixa de login de usuario entrasse nesta pagina e então usei o rendered de modo que quando acesso a pagina1.xhtml como usuario comum funciona, o EDIT não é renderizado, mas quando entro com o login pela caixa de administrador ocorre um erro.

Eu coloquei desta forma:

<p:submenu rendered="#{autAdminManagedBean.administrador}" label="Edit" icon="ui-icon-pencil"> <p:menuitem value="Undo" url="#" icon="ui-icon-arrowreturnthick-1-w" /> <p:menuitem value="Redo" url="#" icon="ui-icon-arrowreturnthick-1-e" /> </p:submenu>

Creio que estou fazendo algo errado e devo fazer de uma outra maneira usando o managedbean.Eu sei que existe JAAS e Spring para fazer essas coisas mas gostaria de fazer assim mais simples porque o projeto é simples.

Alguém poderia me dar esta grande ajuda.

Abraços.

14 Respostas

Hebert_Coelho

Jeito simples? Salva no banco de dados o perfil do cara e depois utilize aí no campo para fazer o if.

Ou então estude Login por JAAS ou Spring Security ou Filter ou PhaseListener

tiago.frioli

Eu tenho um PhaseListener, mas não sabia que era possível restringir componentes do Primefaces por la…

Hebert_Coelho

tiago.frioli:
Eu tenho um PhaseListener, mas não sabia que era possível restringir componentes do Primefaces por la…
Creio que me expressei mau.
Eu citei ali formas de login, caso você não tivesse alguma implementada.

Já que você já tem, basta agora você após realizar o login com sucesso adicionar na sessão um objeto usuário com o seu perfil.

J

Posta o erro que fica mais facil

tiago.frioli

O erro …

Cannot convert auth.Administrador[ alogin=123 ] of type class beans.Administrador to class java.lang.Boolean

java.lang.IllegalArgumentException: Cannot convert auth.Administrador[ alogin=123 ] of type class beans.Administrador to class java.lang.Boolean

at com.sun.el.lang.ELSupport.coerceToBoolean(ELSupport.java:189)

at com.sun.el.lang.ELSupport.coerceToType(ELSupport.java:394)

at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:227)

at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)

at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)

at javax.faces.component.UIComponentBase.isRendered(UIComponentBase.java:413)

at org.primefaces.component.tieredmenu.TieredMenuRenderer.encodeMenuContent(TieredMenuRenderer.java:90)

at org.primefaces.component.tieredmenu.TieredMenuRenderer.encodeMenu(TieredMenuRenderer.java:77)

at org.primefaces.component.menubar.MenubarRenderer.encodeMarkup(MenubarRenderer.java:54)

at org.primefaces.component.menu.BaseMenuRenderer.encodeEnd(BaseMenuRenderer.java:38)

at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)

at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1764)

at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)

at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)

at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1757)

at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760)

at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760)

at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:402)

at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)

at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)

at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)

at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)

at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)

at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1542)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)

at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)

at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)

at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)

at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)

at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:849)

at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:746)

at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1045)

at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:228)

at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)

at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)

at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)

at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)

at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)

at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)

at com.sun.grizzly.ContextTask.run(ContextTask.java:71)

at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)

at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)

at java.lang.Thread.run(Thread.java:662)
Hebert_Coelho

Cara, por algum acaso você não estaria passando um objeto administrador para o método rendered não né?!

tiago.frioli

Cara , sabe como é , eu sou iniciante , to na faculdade ainda , muita coisa estudo por conta propria é normal fazer umas cagadas …

Eu achei que fosse simples a forma que fiz ai, eu loguei como usuario comum e o componente que queria esconder ficou oculto(sucesso!!!), mas quando entrei como administrador deu este erro ai… :frowning:

Ja to pensando em fazer o que disse mesmo, optar por usar Spring ou JAAS, mas como ja tinha um esquema mais ou menos pronto de autenticação eu procurei adaptar sem ter que mexer muito ou incluir conceitos novos ( que nem estão no escopo da disciplina por enquanto).

É isso …

Hebert_Coelho

http://uaihebert.com/?p=1414

dá uma olhada nesse post e veja como que é feito a parte de rendered na tela.

Ele tem um controle de login parecido, utiliza filter e não phaselistener. mas o conceito é o mesmo.

tiago.frioli

Ah valeu, eu sempre vejo seus posts , tem conteudos excelentes.Mas confesso que nunca tinha visto este ai

Vou ler com calma agora aqui ele.Vou aproveitar e implementar outros exemplos que você deu sobre Spring e JAAS.

Obrigado.

Hebert_Coelho

Tranquilo. Veja a parte da tela principal. Como foi montado o rendered, é ele quem faz o que você precisa.

tiago.frioli

Opa, ja to pegando o esquema de como é …

Obrigado.

J

Olha só, para o rendered deverá ser boolean…você está passando um objeto…no seu caso há duas soluções
1: caso o seu método administrador retorne null no caso de usuario normal
rendered="#{autAdminManagedBean.administrador != null}"
2: criar uma propriedade que retorne true caso seja logado na tela administrador e false caso contrario e utilize-a no rendered
rendered="#{autAdminManagedBean.isAdministrador}"

tiago.frioli

jr.mg:
Olha só, para o rendered deverá ser boolean…você está passando um objeto…no seu caso há duas soluções
1: caso o seu método administrador retorne null no caso de usuario normal
rendered="#{autAdminManagedBean.administrador != null}"
2: criar uma propriedade que retorne true caso seja logado na tela administrador e false caso contrario e utilize-a no rendered
rendered="#{autAdminManagedBean.isAdministrador}"

Obrigado, sua dica é bem vinda valeu…vou tentar arrumar aqui…

tiago.frioli

Olá Pessoal tudo bem ?

Bom com a ajuda de vocês eu sanei minha duvida inicial deste tópico e consegui fazer o que queria …

Mas agora surgiu outra duvida.Eu tenho o perfil ADMIN e USER,onde o ADMIN tem acesso a todas as telas e componente e os USER a algumas paginas.

Minha duvida agora é a seguinte, dentro dos USER ha usuários que terão permissão restringida também, ou seja, os usuário tem acesso a alguns componentes do sistemas , mas dentro do grupo usuários ha usuários que tem restrição de acesso a esses “alguns componentes”.Assim o usuário fulano tem acesso ao cadastro por exemplo, mas o usuário cliclano no o tem, ou o usuário fulado tem acesso a tela de modificação mas o usuário beltrano não tem, apenas para exemplificar minha duvida.

Alguém sabe como seria fazer isso? Algum exemplo ?

Abraços.

Criado 15 de agosto de 2012
Ultima resposta 20 de ago. de 2012
Respostas 14
Participantes 3