2010-07-19 16 views
6

Ich habe eine Testgrails App Setup mit einem Kontext von "/ Testapp". Wenn ich einen Link in meinem Gsp hinzufüge, der auf/verweist, geht er nicht zum Stamm meines grails.app.context, sondern zum Stamm meiner grails.serverURL-Eigenschaft.Grails App Stammkontext

Zum Beispiel eine Verbindung mit href "/css/main.css"

Ich würde erwarten, da diese Verbindung tatsächlich in localhost aussehen würde: 8080/testapp/css/main.css statt localhost: 8080/css/main.css

Gibt es einen Weg, dass ich Verweise auf/an meinem grails.app.context vs the grails.serverURL bekommen kann?

Antwort

6

die Frage ist, wie fügen Sie Ihre Links in Ihre gsps?

Wir tun Dinge wie

<link rel="stylesheet" href="${resource(dir: 'css', file: 'stylesheet1.css')}"/> 

und

<g:javascript library="prototype"/> 

durch die g mit: JavaScript und Ressourcenetiketten und Methoden, Sie grails sagen den Weg für Sie einstellen ...

Ich vermute, dass Sie nur Standard-Tags setzen ...

goto

http://grails.org/doc/latest/

und unter Tags in dem linken nav, suchen Sie nach Ressource und/oder Javascript um eine Vorstellung zu bekommen (es schwierig, direkt zu verbinden, um die Dokumentation ... :()

+0

Danke für die Antwort. Wir verwenden die Tag-Bibliotheken, aber wir haben eine Situation mit einer externen Bibliothek, die einen fest codierten/pfad/zu/css hat, den wir nicht ändern können. Klingt so, als müssten wir eine Arbeit finden. – ibuck

19

Einsatz der Antrag contextPath Wert auf der Seite

${request.contextPath} 

und prepend dann die zusätzliche Host-Informationen bei Bedarf die vollständige uRL

1

Sie sollten wahrscheinlich die Ressource-Tag verwenden zu konstruieren in Ihr Grils CSS-Verzeichnis, wie oben erwähnt. Sie können jedoch auch die resource Methode verwenden, um die Root-Kontext Sie Web-Anwendung zu finden, die gleichen Tag verwenden:

${resource(uri:'/')} 

dann benutzen Sie einfach die Zeichenfolge wo auch immer. Und

0

, wenn es um Elemente wie Stylesheets würde ich empfehlen, ein einfaches Tag zu schaffen, die den Trick tun wird, etwas in diese Richtung:

class StylesTagLib { 
    static namespace = "g" 

    def stylesheet = { args, body -> 
     out << """<link rel="stylesheet" href="${resource(dir: 'css', file: args.href)}"/>""" 
    } 
} 

und später in Ihrem Code verwenden Sie es wie folgt aus:

<g:stylesheet href="main.css"/> 

Natürlich können Sie mit den Konventionen Geige (soll ich einen vordefinierten Ordner verwenden? soll ich die CSS-Erweiterung automatisch hinzufügen? stuff like that), aber die allgemeine Idee ist die Hässlichkeit hinter einem gut definierten Tag zu verstecken.

6

Ich hatte ein ähnliches Problem mit OP - wie Grails bilden Links, die am Kontext root und NICHT Server root beginnen?

Sie können dies mit dem Attribut "uri" für die Tags g: link und g: createLink tun.Zum Beispiel:

<g:link uri="/login">login</g:link> 

jeden Kontext Präfix wird falls und produziert die folgenden

<a href="/login">login</a> if your app is at the http://server/ 
<a href="/testapp/login">login</a> if your app is at http://server/testapp/ 

nicht sicher, warum es in der Referenz docs ein undocumented Attribut ist, aber ich fand es in den Javadocs - ApplicationTagLib

Verwandte Themen