我有一個類,看起來像這樣:的Grails的GetProperties方法並不總是返回的屬性按正確的順序
class Foo {
name
description
static constraints = {
name()
description()
}
}
我想在Flexigrid加我的類的實例顯示。當數據發送到flexigrid時,它需要採用JSON或XML格式...我選擇了JSON。 Flexigrid期待它收到的JSON陣列具有以下格式:
{
"page": "1",
"total": "1",
"rows": [
{
"id": "1",
"cell": [
"1",
"The name of Foo 1",
"The description of Foo 1"
]
},
{
"id": "2",
"cell": [
"2",
"The name of Foo 2",
"The description of Foo 2"
]
}
]
}
爲了讓我Foo
對象爲這種格式我做同樣的事情到這一點:
def foos = Foo.getAll(1, 2)
def results = [:]
results[ "page" ] = params.page
results[ "total" ] = foos.size()
results[ "rows" ] = []
for(foo in foos) {
def cell = []
cell.add(foo.id)
foo.getProperties().each() { key, value -> // Sometimes get foo.getProperties().each() returns foo.description then foo.name instead of foo.name then foo.description as desired.
cell.add(value.toString())
}
results[ "rows" ].add([ "id": foo.id, "cell": cell ])
}
render results as JSON
的問題是,每過一段時間foo.getProperties().each()
返回foo.description
然後foo.name
導致foo.description
被置於我的flexigrid的名稱列中,foo.name
被置於我的flexigrid的描述列中以用於特定行。
我試過在Foo
域類中指定約束,所以getProperties
會以正確的順序返回,但它不起作用。 如何確保getProperties
以可預測的順序返回屬性?
這是我解決了這個問題issuse:
def items = Foo.getAll()
for(item in items) {
def cell = []
cell.add(item.id)
Foo.constraints.each() { key, value ->
def itemValue = item.getProperty(key)
if(!(itemValue instanceof Collection)) {
cell.add(itemValue.toString())
}
}
}
所以Foo.constraints
得到映射約束的每個約束的Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntry
一個實例。經過測試,我發現這張地圖總是按照我輸入的順序返回我的Foo
靜態約束(也由Ian確認)。現在只有屬於Foo.constraints
的item
的屬性將被添加到flexigrid的cell
。
爲什麼要投票? – ubiquibacon