12 de dez. de 2007

Curso Struts - Aula 03

tiles-defs.xml
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE tiles-definitions PUBLIC  
        "-//Apache Software Foundation//DTD Tiles Configuration 1.3//EN"  
        "http://struts.apache.org/dtds/tiles-config_1_3.dtd">

<tiles-definitions>
 <definition name="homepage" template="/jsp/layouts/layout.jsp">
  <put name="title" value="Livraria Web" />
  <put name="header" value="/jsp/layouts/banner.jsp" />
  <put name="menu" value="/jsp/layouts/common_menu.jsp" />
  <put name="body" value="/jsp/layouts/home_body.jsp" />
  <put name="footer" value="/jsp/layouts/credits.jsp" />
 </definition>

 <!-- Livros -->
 <definition name="listarLivros" extends="homepage">
  <put name="body" value="/jsp/livro/listar.jsp" />
 </definition>

 <definition name="formularioLivros" extends="homepage">
  <put name="body" value="/jsp/livro/criar.jsp" />
 </definition>

 <!-- Usuarios -->
 <definition name="listarUsuarios" extends="homepage">
  <put name="body" value="/jsp/usuario/listar.jsp" />
 </definition>

 <definition name="formularioUsuarios" extends="homepage">
  <put name="body" value="/jsp/usuario/formulario.jsp" />
 </definition>

 <!-- Login -->
 <definition name="loginUsuario" extends="homepage">
  <put name="body" value="/jsp/login/login.jsp" />
 </definition>
</tiles-definitions>
/jsp/layouts/layout.jsp
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>
<head>
  <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
  <title><tiles:getAsString name="title" /></title>
  <link rel="stylesheet" type="text/css" href="<%=request.getContextPath() %>/stylesheets/scaffold.css"/>

</head>
<body>
    <div id="page">
        <div id="header">
         <tiles:insert name="header" />
        </div>
        <hr class="hidden" />
      <div id="main">
        <div id="content-wrapper">
          <div id="content">
             <tiles:insert name="body" />
          </div>
        </div>
        <div id="sidebar-wrapper">
         <tiles:insert name="menu" />
        </div>
      </div>
        <hr class="hidden" />
        <div id="footer">
         <tiles:insert name="footer" />
        </div>
    </div>
  </body>
</html>
struts-config.xml
<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
          "http://struts.apache.org/dtds/struts-config_1_3.dtd">

<struts-config>

 <!-- Definicao dos Formulario de Beans -->
 <form-beans>
  <form-bean name="livroForm"
   type="br.com.livrariaweb.controle.LivroForm" />
  <form-bean name="usuarioForm"
   type="br.com.livrariaweb.controle.UsuarioForm" />
 </form-beans>

 <!-- Definicao de Excecoes Globais -->
 <global-exceptions></global-exceptions>

 <!-- Definicao de Redirecionamento Global -->
 <global-forwards>
  <forward name="homepage" path="/homepage.do" />
 </global-forwards>

 <!-- Mapeamento de Acoes -->
 <action-mappings>

  <action path="/homepage"
   type="br.com.livrariaweb.controle.HomeAction">
   <forward name="homepage" path="homepage" />
  </action>

  <!-- Cadastro de Livros -->
  <action path="/formularioLivros" forward="formularioLivros" />

  <action path="/salvarLivro"
   type="br.com.livrariaweb.controle.LivroSalvarAction" name="livroForm"
   scope="request" input="formularioLivros">
   <forward name="listar" path="/listarLivros.do"
    redirect="true" />
  </action>

  <action path="/listarLivros"
   type="br.com.livrariaweb.controle.LivroAction">
   <forward name="listar" path="listarLivros" />
  </action>

  <!-- Cadastro de Usuários -->
  <action path="/formularioUsuarios" forward="formularioUsuarios" />

  <action path="/listarUsuarios"
   type="br.com.livrariaweb.controle.UsuarioAction" name="usuarioForm"
   scope="request" input="formularioUsuarios" parameter="metodo"
   validate="true">
   <forward name="listar" path="listarUsuarios" />
   <forward name="formulario" path="formularioUsuarios" />
  </action>

  <!-- Login e Logout -->
  <action path="/login" forward="loginUsuario" />

  <action path="/autenticar"
   type="br.com.livrariaweb.controle.LoginAction" name="usuarioForm"
   scope="request" input="loginUsuario" validate="true">
   <forward name="homepage" path="/homepage.do" />
  </action>

  <action path="/sair"
   type="br.com.livrariaweb.controle.LogoutAction" scope="request">
   <forward name="homepage" path="homepage" />
  </action>

  <!-- Comprar -->
  <action path="/comprar"
   type="br.com.livrariaweb.controle.ComprarAction">
   <forward name="homepage" path="homepage" />
  </action>
 </action-mappings>

 <!-- Arquivo de Definicao de Mensagens -->
 <message-resources parameter="mensagem" />

 <plug-in className="org.apache.struts.tiles.TilesPlugin">
  <set-property property="definitions-config"
   value="/WEB-INF/tiles-defs.xml" />
 </plug-in>

</struts-config>

13 comentários:

Anônimo disse...

Tiago,
Andei pesquisando na internet mas nao achei...
Eu queria fazer aparecer um link quando o usuario fizesse o login e que esse ele tivesse permissao.
Aí eu criei na entidade usuario o atributo permissao como Integer.
Exemplo: 1 para admin
2 para usuario
aí com a tag logic:present verifiquei se o usuario estava no scope=session agora é que é a minha dúvida... o que eu irei usar agora para saber se é admin ou usuário?

Anônimo disse...

estou tentando usar o role da taglib logic... mas sem sucesso

Tiago Ramos disse...

Você pode tentar utilizar a taglib "logic:equal" e verificar se a propriedade é 1 ou 2. Lembre-se que com login vc tem somente autenticacao. Vc n tem controle de permissao de acesso. Mesmo que o link apareca somente para o admin, isso n impede que o usuario tbm acesse, e até mesmo que alguem q n esteja logado acesse a página referenciada.

Anônimo disse...

Ok... funcionou... Obrigado!

Agora estou tentando colocar para funcionar o relacionamento entre a tabela usuario e a de pedidos... fiz os mapeamentos entre as entidades, mas deu erro na hora de rodar...
Acredito eu que possa ser pq tenho que mudar a classe de serviço... Será que teria como postar essa parte também?

renans_alves@yahoo.com.br

Tiago Ramos disse...

Hehehe... eu não fiz essa parte. Mas coloca o seu erro ai que dou uma olhada...

Anônimo disse...

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Servlet execution threw an exception

root cause

java.lang.ExceptionInInitializerError
br.com.pgr.util.HibernateUtil.clinit(HibernateUtil.java:16)
br.com.pgr.servico.UgServico.lista(UgServico.java:26)
br.com.pgr.controle.HomeAction.execute(HomeAction.java:24)
...

Anônimo disse...

Nesse caso o relacionamento é o seguinte...

Tenho as entidades:
Usuario e Ug(Unidade Gestora).

Um usuario tem uma ug.
Uma ug tem muitos usuarios.

O mapeamento usando as anotações está tranquilo... o problema é a classe de servico... nao estou conseguindo implementar...

Obs.: A entidade(tabela) UG é somente para carregar um html:select. para eu saber qual a unidade gestora que o usuario esta cadastrado.

Como eu faria nesse caso?

Tiago Ramos disse...

Não sei se você lembra mas nas aulas de hibernate, colocaríamos o novo usuário dentro da coleção de usuários da Unidade Gestora, e a unidade gestora dentro do usuário.

Não sei como você está fazendo isso, mas caso vc esteja tentando associar o usuário a uma unidade gestora que está numa combo, na sua action ou na classe de servico você precisa carregar novamente essa entidade para depois fazer os sets que falei agora a pouco.

Anônimo disse...

Como eu faço para ter controle de permissao de acesso...

fiz aquele esquema com o equals para verificar a propriedade para saber se é 1 ou 2.
Mas realmente so oculta os links...

Como eu faria para ter segurança no sistema... com relação a mostrar os links somente para usuarios autorizados e segurança pela url?

Tiago Ramos disse...

Renan, para trabalhar com autenticação e autorização você pode dar uma olhada nos recursos do JAAS (Java Authentication and Authorization Service).

http://www.guj.com.br/java.tutorial.artigo.184.1.guj

Anônimo disse...

Valeu...
vou dar uma olhada...

Anônimo disse...

Tiago o que vc acha de implementar Tiles com JSF?
To iniciando os meus estudos agora com o JSF...

Tiago Ramos disse...

Renan, existe algo específico para o trabalhar com templates em jsf. Chama-se "facelets".

Google