2016-12-28 8 views
0

У меня есть два простых класса Staff и Department, и я хочу перечислить сотрудников по подразделениям с использованием HQL, которые затем отображаются в представлении.Как отобразить результат HQL для просмотра в grails.?

Прежде всего это классы домена персонал и отдел

class Staff { 
String fullName 
String dateOfBirth 

static belongsTo = [department: Department] 

}

class Department { 
    String department 

    static hasMany = [staff: Staff] 
} 

Департамента имеет экземпляры, такие как море, земля, воздух.

Вот StaffController.groovy (только действие listbysea, например)

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()] 
    } 

Это мой 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> 

Однако нет никаких данных, приведенных в таблице, и я я не уверен, действительно ли запрос вообще не дает никаких результатов или это проблема с представлением. Поэтому я спрашиваю, правильно ли я вернул результат запроса в представление.? Я даже пробовал этот вопрос

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')") 

Но все же никакого результата не найдено.

Цените любой намек.

+0

Для устранения, вы можете всегда ставьте что-то вроде 'println staffList' в ваш контроллер, как раз перед последней строкой. – GreenGiant

ответ

0

Имя переменной, которое у вас есть в контроллере, не соответствует используемому файлу gsp.

В контроллере используется staffInstance:

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

Но в GSP вы используете staffList:

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

Попробуйте изменить контроллер:

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

Ваше предложение правильно, но тогда у меня есть ошибки, которые, я думаю, связаны с запросом HQL, потому что я выбираю отдел, который является общим для обоих классов. –

+0

Рад слышать, что помогло. Если вы считаете, что это правильный ответ, не забудьте [щелкнуть значок галочки рядом с ответом] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work). – GreenGiant

+0

Да, это решает половину моего вопроса, который должен отображать результат, но я был бы признателен, если бы получил намек на HQL. –