Strict Standards: Declaration of Walker_Page::start_lvl() should be compatible with Walker::start_lvl(&$output) in /www/htdocs/v167612/wplog/wp-includes/classes.php on line 1199

Strict Standards: Declaration of Walker_Page::end_lvl() should be compatible with Walker::end_lvl(&$output) in /www/htdocs/v167612/wplog/wp-includes/classes.php on line 1199

Strict Standards: Declaration of Walker_Page::start_el() should be compatible with Walker::start_el(&$output) in /www/htdocs/v167612/wplog/wp-includes/classes.php on line 1199

Strict Standards: Declaration of Walker_Page::end_el() should be compatible with Walker::end_el(&$output) in /www/htdocs/v167612/wplog/wp-includes/classes.php on line 1199

Strict Standards: Declaration of Walker_PageDropdown::start_el() should be compatible with Walker::start_el(&$output) in /www/htdocs/v167612/wplog/wp-includes/classes.php on line 1244

Strict Standards: Declaration of Walker_Category::start_lvl() should be compatible with Walker::start_lvl(&$output) in /www/htdocs/v167612/wplog/wp-includes/classes.php on line 1391

Strict Standards: Declaration of Walker_Category::end_lvl() should be compatible with Walker::end_lvl(&$output) in /www/htdocs/v167612/wplog/wp-includes/classes.php on line 1391

Strict Standards: Declaration of Walker_Category::start_el() should be compatible with Walker::start_el(&$output) in /www/htdocs/v167612/wplog/wp-includes/classes.php on line 1391

Strict Standards: Declaration of Walker_Category::end_el() should be compatible with Walker::end_el(&$output) in /www/htdocs/v167612/wplog/wp-includes/classes.php on line 1391

Strict Standards: Declaration of Walker_CategoryDropdown::start_el() should be compatible with Walker::start_el(&$output) in /www/htdocs/v167612/wplog/wp-includes/classes.php on line 1442

Strict Standards: Redefining already defined constructor for class wpdb in /www/htdocs/v167612/wplog/wp-includes/wp-db.php on line 306

Strict Standards: Redefining already defined constructor for class WP_Object_Cache in /www/htdocs/v167612/wplog/wp-includes/cache.php on line 433
iFool » Wie werde ich die ID-Spalten los? Arbeiten mit Templates
Home > Groovy & Grails, IT > Wie werde ich die ID-Spalten los? Arbeiten mit Templates

Wie werde ich die ID-Spalten los? Arbeiten mit Templates

GRAILS macht eigentlich automatisch schon sehr schöne Listen aber “per default” werden dabei leider alle Attribute berücksichtigt. Das führt dann dazu, dass man die unwichtigen ID-Felder zur scheinbar wichtigsten Spalte werden: Sie stehen an erster Stelle und werden dann auch noch mit der “show”-Aktion der zugehörigen Domänenklasse verlinkt.

listwithoutid_fieldSo wie links im Bild sieht es schon besser aus: Das ID Feld wird unterdrückt und statt dessen das erste (kennzeichnende) Feld gesetzt und verlinkt.

Jetzt könnte man das für jede Domainklasse nach der Generierung der Ansichten (gsp-Views) anpassen, aber das macht keinen richtigen Spaß, denn

    1. Wäre das eine relativ stupide Arbeit, die man für jede einzelne Domainklasse durchführen müsste
    2. Würde das ganze nach dem nächsten Generieren wiederholt werden müssen

Die Bessere Alternative ist hier die Arbeit mit den Templates, um das GRAILS-Verhalten nachhaltig zu ändern

Zunächst müssen die Templates für das GRAILS-Projekt installiert werden. Dazu gibt man im root-Verzeichnis des GRAILS-Projekts folgendes ein:


grails install-templates

templatesfolderHierdurch wird ein Unterverzeichnis “src/templates” erzeugt. Eingriffe in diesem Bereich haben mittelbaren Einfluß auf die GRAILS-Funktionsweise.

Im Unterverzeichnis “src/templates/scaffolding” befinden sich vorlagen für die Dialoge der CRUD-Anwendungen.

Hier soll nun exemplarisch die Veränderung in der “list.gsp”-Vorlage beschrieben werden, die sich dann bei der zukünftigen Generierung der “list.gsp”-Seiten für die Domainklassen auswirkt.

Der entscheidende Eingriff ist in einer Schleife erforderlich, in der der Tabellenrumpf der Liste aufgebaut wird:


<g:each in="\${${propertyName}List}" status="i" var="${propertyName}">
    <tr class="\${(i % 2) == 0 ? 'odd' : 'even'}">
        <%  props.eachWithIndex { p,i ->
             if(i == 0) { %>
                 <td><g:link action="show" id="\${${propertyName}.id}">\${fieldValue(bean:${propertyName}, field:'${p.name}')}</g:link></td>
             <%      } else if(i < 6) { %>
                 <td>\${fieldValue(bean:${propertyName}, field:'${p.name}')}</td>
             <%  }   } %>
        </tr>
    </g:each>

Das war das Original und in der folgenden manipulierten “list.gsp” sind nur wenige Änderungen erforderlich gewesen um die ID-Spalte zu unterdrücken:


<g:each in="\${${propertyName}List}" status="i" var="${propertyName}">
    <tr class="\${(i % 2) == 0 ? 'odd' : 'even'}">
        <% props.eachWithIndex { p,i ->
            if (i > 0) {
                if(i == 1) { %>
                    <td><g:link action="show" id="\${${propertyName}.id}">\${fieldValue(bean:${propertyName}, field:'${p.name}')}</g:link></td>
                <% } else if(i < 6) { %>
                    <td>\${fieldValue(bean:${propertyName}, field:'${p.name}')}</td>
                <%  }  } } %>
            </tr>
</g:each>
    Änderungen:

Zeile 5: Eingefügt um das erste Attribut (”id”) beim Aufbau der Seite nicht zu berücksichtigen
Zeile 6: Die Verlinkung soll mit dem 2. Feld (echtes Wertattribut) statt dem 1. Feld (”id” erfolgen)
Zeile 10: Die zusätzliche Selektion (Zeile 5) erfoldert hier eine zusätzliche Klammer.

Das ist schon alles, was zu tun ist…

Groovy & Grails, IT

  1. Bisher keine Kommentare
  1. Bisher keine Trackbacks