Прежде всего, я видел, что вы используете относительные пути в ваших ссылках на javascripts и т. Д.
<link href="../dist/css/sb-admin-2.css" rel="stylesheet">
Я бы предпочел использовать абсолютные
<link href="${request.contextPath}/css/sb-admin-2.css" rel="stylesheet">
Я использую несколько шаблонов Bootstrap в разных приложениях Grails (в одном приложении даже sb-admin). Позвольте мне попытаться объяснить мой способ (кстати, похоже, что это почти то же самое, что и ваша первая ссылка, но другое описание может немного помочь) ...:
-
скопируйте index.html в views-> layout-> main.gsp
-
поместите, например, g: layoutBody в соответствующие места на странице main.gsp, и удалите элементы, которые не полезны для вашего приложения.
<div id="page-wrapper"> <g:layoutBody/> </div> <!-- /#page-wrapper -->
-
копировать javascripts, изображения и т. д. в каталог веб-приложений и проверять ссылки в макете main.gsp, которые они ссылаются на javascripts и т. д. через
<script src="${request.contextPath}/js/bootstrap.min.js"></script>
-
после этого ваши взгляды могут выглядеть так:
<%@ page import="urlaub.Employee" %> <!DOCTYPE html> <html> <head> <meta name="layout" content="main"> <g:set var="entityName" value="${message(code: 'employee.label', default: 'Employee')}" /> <title><g:message code="default.list.label" args="[entityName]" /></title> </head> <body> <g:if test="${session.user.admin}"> <div class="row"> <g:link class="btn btn-primary btn-flat" action="create"><g:message code="default.new.label" args="[entityName]" /></g:link> </div> </g:if> <g:render template="/flash_message" bean="${flash}" /> <div class="row"> <h1><g:message code="default.list.label" args="[entityName]" /></h1> <hr> </div>