[英]Grails: Sorting Nested Domain Objects
我有一對多的關系。
我有一個可以將多個文件上傳到其中的應用程序。 “應用程序”視圖包含“上載的文件”列表(列表中的文件僅包含有關文件的元數據,例如文件名,文件大小等)。 我無法對嵌套列表進行排序。
我正在使用sortableColumn在控制器中調用排序操作。
如何檢索應用程序,並指定按請求的屬性(例如文件名,文件大小等)對上傳文件的嵌套列表進行排序
編輯:
以下是一些摘要:
這是應用程序域對象
class Application implements Serializable {
private static final long serialVersionUID = 1
Firm firm
static hasMany = [applicationDocumentHolders:ApplicationDocumentHolder]
static belongsTo = [firm:Firm]
static mapping = {firm lazy: false}
}
這是應用程序文檔保存器(我將實際文檔存儲在MongoDB中,將元數據存儲在SQLServer中的applicationDocumentHolder對象中,因此為了簡單起見,我將文檔文件省略了,因為它與該問題無關)
import java.sql.Time
class ApplicationDocumentHolder implements Serializable {
private static final long serialVersionUID = 1
static belongsTo = [application:Application]
static mapping = {application lazy: false}
Application application
ApplicationDocumentType type
ApplicationDocumentStatus status
Date verfiedDate
Long uploadFileId
//Following fields will be null until a file is uploaded
String fileName
Date uploadDate
String uploadUserId
long fileSize
static constraints = {
type blank: false
status blank: false
verfiedDate nullable: true
uploadFileId nullable: true
uploadFile nullable: true
fileName nullable: true
uploadDate nullable: true
uploadUserId nullable: true
fileSize nullable: true
}
}
這是GSP的一個片段,我在其中使用sortableColumn標記在控制器中調用sort操作
<g:sortableColumn action="sort" property="type" title="${message(code: 'applicationDocumentHolder.type.label', default: 'Type')}" />
<g:sortableColumn action="sort" property="status" title="${message(code: 'applicationDocumentHolder.status.label', default: 'Status')}" />
<g:sortableColumn action="sort" property="verfiedDate" title="${message(code: 'applicationDocumentHolder.verfiedDate.label', default: 'Verfied Date')}" />
<g:sortableColumn action="sort" property="fileName" title="${message(code: 'applicationDocumentHolder.uploadFileName.label', default: 'Upload File Name')}" />
我想知道這樣做的最好方法是什么。
我可以在控制器中對ApplicationDocumentHolders的集合進行排序,但是我不斷收到違規信息,因為這些違規是附加到數據庫的對象。
我還可以重新檢索排序后的列表,但是我不確定從數據庫中檢索到動態排序的嵌套對象時該如何指定(我知道必須有一種簡單的方法來做到這一點,但是我很陌生grails)。
我想知道如何同時使用這兩種方法,以供將來參考。
您可以創建一個簡單的Closure,並接受要排序的屬性和文件。 然后,您可以關閉該Closure的Closure.curry(attributeName),以獲取一個按該屬性排序的新Closure。 然后,將Closure傳遞給Collection.toSorted()以對文件列表進行排序。
def files = [
[name: 'foo.txt', size: 10],
[name: 'bar.txt', size: 30],
[name: 'hello.txt', size: 20]
]
def sorter = { attr, file -> file[attr] }
files.toSorted sorter.curry('size') // sort by size
files.toSorted sorter.curry('name') // sort by name
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.