我有一个使用grails 2.5.1的应用程序我试图从列表中更新相同类型的多个域对象。当我尝试保存时没有错误,即使我使用failOnError并刷新它仍然不会失败也不会保存。当我使用调试器时,我可以看到我的对象在保存时和之后有更新的值但是当我以其他形式重新加载对象时,将不会更新。我也试过等待会议结束,但不会改变。这是一段保存的代码。
def saveMultipleMissingAssets(MultipleAssetCommand command) {
command.assets.each { a ->
Asset asset = Asset.findById((long)a.id)
asset.properties['missing'] = a.properties
asset = asset.save(flush: true, failOnError: true)
if(asset.hasErrors()){
print asset.properties
}
}
}
我使用的是findById(a.id)我尝试过使用get和read但结果是一样的。
这是我观点的一部分
<g:each var="asset" in="${assetInstanceList}" status="i">
<div id="asset${i}">
<g:hiddenField name='assets[${i}].id' value='$asset.id'/>
</div>
<tr>
<td>${asset.id}</td>
<th>${asset.assetType}</th>
<td>${asset.serialNumber}</td>
<td><g:checkBox name='assets[${i}].missing' value='1' checked="${asset.missing}"
class="checkbox1"/></td>
</tr>
</g:each>
和我的对象看起来Command对象是:
class SingleAssetCommand {
int id
Boolean missing
}
和
@Validateable
class MultipleAssetCommand {
List<SingleAssetCommand> assets = [].withDefault {new SingleAssetCommand()}
}
我想要更新的域名就像这样
class Asset {
AssetType assetType
Integer assetId
String serialNumber
Boolean missing
Date dateCreated
Date lastUpdated
Employee employee
static hasMany = [allocations: Allocation, trackingEvents:TrackingEvent]
static constraints = {
assetId(nullable: true)
assetType()
serialNumber(nullable: true)
missing(nullable: true)
employee nullable: true //,lazy: false
}
static mapping = {
missing index: 'asset_missing_idx'
employee index: 'asset_allocated_idx'
}
String toString() {
assetType.toString() + ": " + serialNumber
}
}
准备视图的控制器的一部分如下:
def multiEdit = {
List<Asset> list = Asset.list()
[assetInstanceList: list]
}
我可能做错了什么?