Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

PROBLEMAS PARA LOCALIZAR ARQUIVOS RESOURCE NO SPRINGBOOT

Boa Tarde, Estou com um projeto inicial, mas logo esbarrei em um problema de que, somente a página inicial encontra os arquivos da pasta "static", e quando me redireciono para um nova página, o CSS e JS não são encontrados.

// TEMPLATE

<%@ tag language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<%@ attribute name="extraCss" fragment="true" %>

<!DOCTYPE html>
<html>
<head>
     <!--Import Google Icon Font-->
      <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"/>
      <!--Import materialize.css-->
      <link type="text/css" rel="stylesheet" href="../materialize/css/materialize.min.css"  media="screen,projection"/>
      <jsp:invoke fragment="extraCss"></jsp:invoke>

      <c:url value="../materialize/js" var="jsPathMaterialize" />
      <c:url value="../css" var="cssPath" />
      <link type="text/css" rel="stylesheet" href="${cssPath}/rodape.css"/>           
      <script type="text/javascript" src="${jsPathMaterialize}/jquery.js"></script>
         <script type="text/javascript" src="${jsPathMaterialize}/materialize.min.js"></script>


      <!--Let browser know website is optimized for mobile (Otimiza o layout para mobile - materialize)-->
      <meta name="viewport" http-equiv="Content-Type" content="width=device-width, initial-scale=1.0; text/html; charset=UTF-8"/>
</head>
<body>
    <%@ include file="/WEB-INF/views/cabecalho.jsp" %>
        <jsp:doBody/>
    <%@ include file="/WEB-INF/views/rodape.jsp" %>    


</body>
</html>

// INDEX

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib tagdir="/WEB-INF/tags" prefix="tags"%>   
<%@ taglib uri="http://www.springframework.org/tags" prefix="s" %>

<tags:pageTemplate> 

    <jsp:attribute name="extraCss">
        <link type="text/css" rel="stylesheet" href="css/estilo.css"/>
    </jsp:attribute>

    <jsp:body>

        <main>
            <div>
                <ul class="grid-teste">
                    <li class="grid-teste-link">
                        <a href="${s:mvcUrl('PC#formularioPedido').build()}">
                            <i class="large material-icons">note_add</i>
                            <span>Adicionar Pedidos</span>
                        </a>
                    </li>
                    <li class="grid-teste-link">
                        <a href="#!">
                            <i class="large material-icons">offline_pin</i>
                            <span>Finalizar Pedidos</span>
                        </a>
                    </li>
                    <li class="grid-teste-link">
                        <a href="#!">
                            <i class="large material-icons">search</i>
                            <span>Buscar Pedidos</span>
                        </a>
                    </li>
                    <li class="grid-teste-link">
                        <a href="#!">
                            <i class="large material-icons">settings</i>
                            <span>Configurações</span>
                        </a>
                    </li>
                </ul>
            </div>

        </main>

    </jsp:body>

</tags:pageTemplate>

// FORMULARIO

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib tagdir="/WEB-INF/tags" prefix="tags"%>   

<tags:pageTemplate> 

    <main>
        <span>Formulário Pedidos</span>
    </main>

</tags:pageTemplate>

// CABEÇALHO

  <nav>
    <div class="nav-wrapper green accent-4">
      <a href="#" class="brand-logo">Logo</a>
      <ul id="nav-mobile" class="right hide-on-med-and-down">
        <li><a href="#">Sass</a></li>
        <li><a href="#">Components</a></li>
        <li><a href="#">JavaScript</a></li>
      </ul>
    </div>
  </nav>

// CONTROLLER

@Controller
@RequestMapping("/pedidos")
public class PedidoController {

    @GetMapping
    public String formularioPedido(){
        return "formulario";
    }

}

[OBS]: - Estou usando MATERIALIZE - Todas as VIEWs utilizam o template

[ERRO]: - Quando estou no INDEX.jsp carrega corretamente o CSS e JS, mas quando clico para ir para a view do FORMULARIO.jsp, o CSS e JS não são carregados (Verificando no CONSOLE do NAVEGADOR ele está procurando esse arquivos dentro da pasta "pedidos" o que não é correto, pois "pedidos" é apenas a MAPPING, e ele está vendo como uma pasta)

[SOLUÇÃO ATÉ O MOMENTO / GAMBIARRA] - Para resolver eu precise voltar 1 nível "../" nas chamadas do CSS e SCRIPT (Como feito no template), e assim funcionando corretamente.

  • Só que se por exemplo, eu criar um MAPPING "pedidos/validos/"

  • Eu teria que botar pra voltar 2 níveis nas chamadas do CSS e JS

==> Gostaria de saber como posso resolver esse problema ?

==> Alguma dica inicial para aplicar nesse pequeno projeto ?

==> Como funciona esse "properties" ? spring.mvc.static-path-pattern=/**

Já agradeço pela atenção de todos.

2 respostas

Opa, no c:url você pode sempre começar com "/" e não se preocupar com path relativo... coloca sempre o absoluto. É o mais recomendado.

solução!

Como assim ? Porque se eu tirar o ".." ele não encontra os a pasta onde se encontra o CSS, JS