Rendered Primefaces

14 respostas
T

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

H

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

T

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

H

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

T

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)
H

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

T

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 …

H

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.

T

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.

H

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

T

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}"

T

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…

T

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