Grails 资源找不到错误,那么资源插件呢

Grails 资源找不到错误,那么资源插件呢,grails,resources,Grails,Resources,我使用grails已经快一年了。从现在开始,我想在gsp中链接css或js文件。我做了以下工作: 我在web app文件夹下创建了一个新文件(如资源文件),并将所有文件夹文件放在那里(如导入引导时,我在资源下有一个父文件夹引导,在引导下有css、img和js文件夹及其文件) 然后,要导入css文件,我执行了以下操作(): 这非常有效,但是当我试图在Grails2.2.4中创建一个新项目时,我遇到了一个ResourceNotFound错误(404到浏览器,下面是控制台) 当我意识到控制台中的这

我使用grails已经快一年了。从现在开始,我想在gsp中链接css或js文件。我做了以下工作:

  • 我在web app文件夹下创建了一个新文件(如资源文件),并将所有文件夹文件放在那里(如导入引导时,我在资源下有一个父文件夹引导,在引导下有css、img和js文件夹及其文件)

  • 然后,要导入css文件,我执行了以下操作():

  • 这非常有效,但是当我试图在Grails2.2.4中创建一个新项目时,我遇到了一个ResourceNotFound错误(404到浏览器,下面是控制台)

    当我意识到控制台中的这些错误一次来自resources函数,一次来自客户端(浏览器)请求的GET


    当我看到他们建议使用js和css文件夹时。在这两个目录中拆分一个工具(如twitter引导)有意义吗?

    我也有同样的问题,我不知道你有什么设置,但我在我的mail.gsp-page顶部有这个:

    <link rel="stylesheet" href="${resource(dir: 'css', file: 'bootstrap.css')}" type="text/css">
    
    
    
    (在-tag内)

    如果您需要导入.js文件,这对我很有用:

    <script src="${resource(dir: 'js', file: 'bootstrap.js')}"></script>
    
    
    
    这是在最底部的页面内的-标记


    我使用的是Grails2.1.1。

    资源插件添加到
    Config.groovy
    的默认“临时资源”模式的一部分是
    /css
    /js
    目录。如果您希望静态资源具有不同的结构,则必须创建资源定义文件(例如,
    BootstrapResources.groovy
    )或将目录结构添加到临时模式中:

    // What URL patterns should be processed by the resources plugin
    grails.resources.adhoc.patterns = ['/images/*', '/css/*', '/js/*', '/plugins/*', '/resources/*']
    

    这将使
    /web app/resources
    中的所有内容都成为临时资源,并受资源插件的处理。

    我开始认为,最灵活的方法是在Tomcat/Grails(如Nginx)前面使用代理来提供静态内容(对于所有的'resources/*'URI)并让Grails处理所有动态内容(对于其余URI)

    毕竟,使用Nginx服务静态文件应该比让Tomcat/Grails这样做更有效

    但是,事后想一想,Resources插件强迫您将资源分为三个目录应该是很遗憾的——对于使用Ext.js、WYSIWIG编辑器等包含大量文件的简单场景,Grails会变得很麻烦……

    好的,我相信我有一个(半)可行的解决方案:

    假设我们需要包括Twitter引导3和TinyMce

    在webapp目录下,我创建以下目录:

    resources/bootstrap/
    resources/bootstrap/css/
    resources/bootstrap/css/bootstrap.min.css
    resources/bootstrap/fonts/
    resources/bootstrap/fonts/glyphicons-halflings-regular.eot
    resources/bootstrap/fonts/glyphicons-halflings-regular.svg
    resources/bootstrap/fonts/glyphicons-halflings-regular.ttf
    resources/bootstrap/fonts/glyphicons-halflings-regular.woff
    resources/bootstrap/js/
    resources/bootstrap/js/bootstrap.min.js
    resources/jquery/
    resources/jquery/jquery-2.0.3.min.js
    resources/tiny_mce/
    resources/tiny_mce/langs/ /*many files here*/
    resources/tiny_mce/plugins/ /*many files here*/
    resources/tiny_mce/themes/ /*many files here*/
    resources/tiny_mce/utils/ /*many files here*/
    resources/tiny_mce/tiny_mce_popup.js
    resources/tiny_mce/tiny_mce_src.js
    resources/tiny_mce/tiny_mce.js
    
    然后我在ApplicationResources.groovy中声明我的资源

    modules = {
        application {
            resource url:'js/application.js'
        }
    
        jquery {
            resource url:'resources/jquery/jquery-2.0.3.min.js'
        }
    
        bootstrap {
           dependsOn 'jquery'
           resource url:'resources/bootstrap/css/bootstrap.min.css'
           resource url:'resources/bootstrap/js/bootstrap.min.js'
        }
    
        tinymce {
            resource url:'resources/tiny_mce/tiny_mce.js'
        }
    }
    
    在Config.groovy中

    grails.resources.adhoc.patterns = ['/images/*', '/css/*', '/js/*', '/plugins/*']   /*no changes here*/
    grails.resources.adhoc.excludes = ['/**/langs/**/*.*', '/**/themes/**/*.*']  /*to permit some Ajax calls from tiny_mce.js to relevant resources*/
    grails.resources.debug=true 
    /* 
    this is why I call my solution SEMI working. 
    If set grails.resources.debug to false, TinyMce is NOT working because the above excludes are not active, and I receive 404 errors
    */
    
    grails.resources.debug=true 
    
    然后,在main.gsp

    <!DOCTYPE html>
        <head>
            <g:javascript library="application"/>
            <g:javascript library="bootstrap"/>
            <g:javascript library="tinymce"/>
    
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
            <title><g:layoutTitle default="Grails"/></title>
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <link rel="shortcut icon" href="${resource(dir: 'images', file: 'favicon.ico')}" type="image/x-icon">
            <link rel="apple-touch-icon" href="${resource(dir: 'images', file: 'apple-touch-icon.png')}">
            <link rel="apple-touch-icon" sizes="114x114" href="${resource(dir: 'images', file: 'apple-touch-icon-retina.png')}">
            <link rel="stylesheet" href="${resource(dir: 'css', file: 'main.css')}" type="text/css">
            <link rel="stylesheet" href="${resource(dir: 'css', file: 'mobile.css')}" type="text/css">
    
            <r:layoutResources />
            <g:layoutHead/>
        </head>
        <body>
            <div id="grailsLogo" role="banner"><a href="http://grails.org"><img src="${resource(dir: 'images', file: 'grails_logo.png')}" alt="Grails"/></a></div>
            <g:layoutBody/>
            <div class="footer" role="contentinfo"></div>
            <div id="spinner" class="spinner" style="display:none;"><g:message code="spinner.alt" default="Loading&hellip;"/></div>
    
            <r:layoutResources />
        </body>
    </html>
    
    我收到了404个与TinyMce在页面加载后动态获取的
    grails.resources.adhoc.excludes
    资源相关的错误

    有什么线索吗?我真的很接近找到解决方案,所以我很高兴得到你的意见
    此测试项目可从此处下载:

    问题的另一个答案如下:

  • 清理你的项目
  • 更改“BuildConfig.groovy”并使用更新版本的资源插件
  • 刷新项目的依赖项

  • 现在一切都很好

    所以一般来说,问题可能是:有没有一种简单明了的方法可以将静态文件夹放在webapp中(例如twitter引导、selected js、jquery widget),保持它们的目录结构,避免将这些资源拆分为三个grails资源插件目录(images、js、css)?我说得对吗?如果是这样的话,这种方法在2.2.4之前的版本中效果很好,但是2.2.4已经不起作用了。是的,这正是我的问题。您是否尝试过在设置中使用资源模块?如果您指的是g:resource标签,我试过了我的意思是
    。与@codelark所指的
    BootstrapResources.groovy
    一致。那么您在css和js目录中拆分了引导?简短回答-是。这就是我的工作。如果我检查了控制台日志,看到了您在最初的问题中所写的错误消息,我也会遇到同样的问题。虽然可能会给我们一些线索…但忘了说bootstrap3总是以这种方式工作。问题在于TinyMCE if debug=false我知道这是一个非常老的问题,但我认为这个回答会对某人有所帮助。如果我们将
    grails.resources.resourceLocatorEnabled=false
    放在
    Config.groovy
    文件中,那么它应该可以工作。无需添加
    grails.resources.adhoc
    属性。
    <head>
    ...
    <script type="text/javascript">
    $(function() {
        tinymce.init({selector:'textarea'});
    });   
    </script>
    </head>
    <body>
    ...
    <h1>Welcome to Grails</h1>
    check bootstrap - start
        <span class="glyphicon glyphicon-search"></span>
        <button type="button" class="btn btn-default btn-lg">
         <span class="glyphicon glyphicon-star"></span> Star
        </button>
    check bootstrap - stop
    
    <textarea>Your content here.</textarea>
    ...
    </body> 
    
    grails.resources.debug=true