2016-12-28 6 views
0

Ich habe zwei einfache Klassen Mitarbeiter und Abteilung und ich möchte Mitarbeiter nach Abteilung mit HQL auflisten, die dann in einer Ansicht angezeigt.Wie wird das HQL-Ergebnis angezeigt, um es in Grails anzuzeigen?

Zunächst einmal sind diese Domain Klassen Mitarbeiter und Abteilung

class Staff { 
String fullName 
String dateOfBirth 

static belongsTo = [department: Department] 

}

class Department { 
    String department 

    static hasMany = [staff: Staff] 
} 

Abteilung hat Instanzen wie Meer, Land, Luft.

hier ein StaffController.groovy (nur eine listbysea Aktion zum Beispiel) ist

def listbysea() { 
     params.max = Math.min(params.max ? params.int('max') : 10, 100) 

     //Query 
     def staffList = Staff.executeQuery("SELECT s.fullName from Staff s join s.department d WHERE d.department = 'Sea') 
     [staffInstance: staffList, staffInstanceTotal: staffList.size()] 
    } 

Das ist mein listbysea.gsp

<table class="table table-striped table-hover table-bordered"> 
     <thead> 
      <tr> 
       <g:sortableColumn property="fullName" title="${message(code: 'staff.fullName.label', default: 'Full Name')}" /> 

       <g:sortableColumn property="dateOfBirth" title="${message(code: 'staff.dateOfBirth.label', default: 'Date of Birth')}" /> 

      </tr> 
     </thead> 
     <tbody> 
      <g:each in="${staffList}" status="i" var="staffInstance"> 
       <tr class="${(i % 2) == 0 ? 'even' : 'odd'}"> 

       <td style="vertical-align: middle;"><g:link action="show" id="${staffInstance.id}"> ${fieldValue(bean: staffInstance, field: "fullName")}</g:link></td> 

       <td style="vertical-align: middle;"> ${fieldValue(bean: staffInstance, field: "dateOfBirth")}</td> 

       </tr> 
      </g:each> 
     </tbody> 
    </table> 
jedoch

gibt es keine in der Tabelle angegebenen Daten und I Ich bin mir nicht sicher, ob die Abfrage tatsächlich überhaupt zu Ergebnissen führt oder ob es sich um ein Problem mit der Ansicht handelt. Also habe ich gefragt, ob ich das Richtige getan habe, um das Abfrageergebnis an die View zurückzugeben. Ich habe sogar versucht, diese Abfrage

def staffList = Staff.executeQuery("SELECT new map(s.fullName as fullName, d.department as department)\ 
     FROM Staff as s, Department as d \ 
     WHERE s.department = d HAVING s.department = ('Sea')") 

Aber immer noch kein Ergebnis angezeigt.

Schätzen Sie jeden Hinweis.

+0

zu beheben, können Sie Stellen Sie immer etwas wie 'println staffList' in Ihren Controller, kurz vor der letzten Zeile. – GreenGiant

Antwort

0

Der Variablenname, den Sie in Ihrem Controller haben, stimmt nicht mit dem überein, was die GSP-Datei verwendet.

In der Steuerung Sie staffInstance verwenden:

def staffList = Staff.executeQuery("SELECT s.fullName from Staff s join s.department d WHERE d.department = 'Sea') 
[staffInstance: staffList, staffInstanceTotal: staffList.size()] 

Aber in der gsp verwenden Sie staffList:

<g:each in="${staffList}" status="i" var="staffInstance"> 

Versuchen Sie, den Controller zu ändern:

[staffList: staffList, staffInstanceTotal: staffList.size()] 
+0

Ihr Vorschlag ist richtig, aber dann habe ich Fehler, die meiner Meinung nach mit der HQL-Abfrage zusammenhängen, weil ich eine Abteilung auswähle, die beiden Klassen gemeinsam ist. –

+0

Gut zu hören, dass geholfen hat. Wenn Sie der Meinung sind, dass dies die richtige Antwort ist, vergessen Sie nicht [klicken Sie auf das Häkchen neben der Antwort] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)). – GreenGiant

+0

Ja, das löst die Hälfte meiner Frage, die das Ergebnis anzeigen soll, aber ich würde mich freuen, wenn ich einen Hinweis auf HQL bekomme. –

Verwandte Themen