| 

.NET C# Java Javascript Exception

Scaffolding template

Dies ist das Archiv des ehemaligen Forums zum Thema Groovy, Grails, Griffon und Bean Scripting Framework, welches unter groovy-forum.de existierte. Die neue Adresse des Groovy-Forums ist: http://codekicker.de/fragen/themen/groovy.


Scaffolding template

koeberle - 10.09.2009 12:35
Wie komme ich im Template für Views und Controller an statische Variablen von der Domain-Klasse ran.

Christian


Re: Scaffolding template

koeberle - 10.09.2009 15:33
das funktioniert nur fast, da sich meine Domain-Klassen in Packages befinden. Wie komm ich jetzt an das Package.
Wenn ich das hier machen: "${packageName}.${className}"
bekomme ich das: <%@ page import="mypackage.MyDomainClass" %>.MyDomainClass.

Christian


Re: Scaffolding template

koeberle - 11.09.2009 13:56
Danke, die Doku wird immer dünner je weiter man sich in die Eingeweide von Grails vor wagt.
Aber die Lösung ist es immer noch nicht, denn domainClass.fullName.class ergibt java.lang.String.

Christian


Re: Scaffolding template

koeberle - 11.09.2009 14:56
Vielen Dank Horst,

Class.forName() hat mich dann ans Ziel gebracht. Und so sieht die Lösung aus.
Die Domain-Klasse
Language: Groovy
package mypackage class MyClass &#123; static securRoles = &#91;'ADMIN', 'VIP'&#93; ... &#125;
Hier die entscheidenen Zeilen aus einem Template für ein View:
...
            <%
              fullName = Class.forName(domainClass.fullName, true, this.getClass().getClassLoader()).newInstance() 
              securRoles = GrailsClassUtils.getStaticPropertyValue(fullName.class, 'securRoles')
              roleNames = ""
              if(securRoles){
                securRoles.eachWithIndex{role, i-> 
                  if(i>0)  roleNames += ', '
                  roleNames += role
                }
             %>
                <g:ifAnyGranted role="${roleNames}">
                  <div class="buttons">
                      <g:form>
                          <input type="hidden" name="id" value="\${${propertyName}?.id}" />
                          <span class="button"><g:actionSubmit class="edit" value="Edit" /></span>
                          <span class="button"><g:actionSubmit class="delete" onclick="return confirm('Are you sure?');" value="Delete" /></span>
                      </g:form>
                  </div>
                </g:ifAnyGranted>
            <%} //if(securRoles) %>
...
Und hier die generierte GSP:
                <g:ifAnyGranted role="ADMIN, VIP">
                  <div class="buttons">
                      <g:form>
                          <input type="hidden" name="id" value="${plantInstance?.id}" />
                          <span class="button"><g:actionSubmit class="edit" value="Edit" /></span>
                          <span class="button"><g:actionSubmit class="delete" onclick="return confirm('Are you sure?');" value="Delete" /></span>
                      </g:form>
                  </div>
                </g:ifAnyGranted>

Kann man den grünen Teil noch ein bisschen eleganter gestalten?

Christian


Re: Scaffolding template

koeberle - 11.09.2009 15:10
MyClass war natürlich nur ein Beispiel. Da es sich um ein Scaffolding-Template für Views handelt muss es per Definition ja auf unterschiedliche Klassen anzuwenden sein (grails generate-views ...). Und die Tags von dem Spring-Security-Plugin möchte ich ja in allen meinen Views verwenden.

Christian


Re: Scaffolding template

milkyman - 11.09.2009 15:21
Dass es für allgemein gültig sein soll ist schon klar. Nicht klar ist mir, ob du die securRoles pro Domain definierst oder nicht.

Vielleicht denke ich aber auch zu stark in Standard-CRUD-Views mit genau einer "Haupt"-Domain.

Weil dann müsste doch auch
<g:ifAnyGranted role="${MyClass.securRoles.join(", ")}">

und damit im Template
<g:ifAnyGranted role="\${${domainClass.fullName}.securRoles.join(", ")}">
funktionieren. Ganz ohne forName und GrailsClassUtils...

PS: Evtl. escapen der " innerhalb der "

Bye,
Horst


Re: Scaffolding template

milkyman - 11.09.2009 16:19
Du musst bei der einfachen Variante die Views auch nicht neu generieren, da auch dort jedesmal der join genutzt wird.

Ging mir übrigens mit den Templates ähnlich, Doku ist kaum verhanden, als experimentiert man rum und bastelt irgendwas.

Und hin und wieder findet man wo ein Beispiel, wie es einfacher geht. Die GrailsClassUtils habe ich auch erst viel später gefunden, genauso wie grailsApplication.getClassForName und den Zugriff auf Plugin-Informationen und Closures.

Bye,
Horst


Re: Scaffolding template

koeberle - 11.09.2009 16:36
Kannst du vielleicht da mal deine Wissensschätze ins Wiki einfließen lassen. Ich werde damit auch mal anfangen, kann ja passieren, dass da noch ein dritte was machen will.

Christian


Stelle deine Groovy-Frage jetzt!


Diese Seite zeigt den Thread "Scaffolding template" der ehemaligen Webseite groovy-forum.de, welche durch einen Serverunfall zerstört wurde. codekicker.de hat viele Konversationen über die beliebte Programmiersprache Groovy und zugehörige Frameworks wie das Grails-Framework retten können.

Hast Du eine Frage zum Thema Groovy, Grails oder allgemein Java? Viele ehemalige groovy-forum.de Mitglieder beantworten dir auf codekicker.de deine Frage! Stelle jetzt eine Frage!

Viele weitere Diskussionen zu Grails und Groovy befinden sich auf der Threadübersicht des alten groovy-forum.de.