在grails中使用相同的ID更新许多项目
问题描述:
我将值保存在两个表中asset和asset_history.On创建资产我将值保存在资产表中如果有任何更新,我想让它存储在资产和asset_history上的id基础上。现在我想在编辑页面中获取两个表值,以获取asset_history我使用sql查询来获取asset_history.all中的值正在运行良好,但它正在进入数组列表值(所有更新列表都显示在单行中)。我在编辑页面的updata值应该保存并显示在asset_history的不同行中。因为我用于循环,但它没有得到值。在grails中使用相同的ID更新许多项目
资产表,我有这些领域: -
id
asset_title
asset_description
client_id
comment
status
etc...
在asset_history场: -
id
comment
update_on
update_by
status
如果资产field.The更新列表中的任何更新应在资产和asset_history.I保存已经使用查询来更新(如下所示)。但它正在asset_history表中获取arraylist。
编辑操作
def dataSource
def edit={
def assetInstance = Asset.get(params.id)
if (!assetInstance) {
flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'asset.label', default: 'Asset'), params.id])}"
redirect(action: "list")
}
else { Sql sql = new Sql(dataSource)
def result = sql.rows("SELECT * from asset_history where id ='"+params.id+"' ")
//def n=result
/* def arr = (String[])result
for(i in 0 .. result.size()-1)
{
return [assetInstance: assetInstance,result:i]
}*/
return [assetInstance: assetInstance,result: result]
}
}
在edit.gsp
<tbody>
<tr>
<td>${result.id}</br></td>
<td>${result.comment}</br></td>
<td>${result.update_on}</br></td>
<td>${result.update_time}</br></td>
<td>${result.update_by}</br></td>
</tr>
</tbody>
在asset_history表中的值越来越在ArrayList和显示单row.But我想表明它在单独一行更新列表,当我每次更新。我用for循环这个,但它不工作。请指导我解决这个问题。
答
你的问题是,你只能从Groovy中的一个函数中返回一个值(以及我知道的所有其他语言)。因此,for循环中的第一次迭代返回并且以下迭代(您期望返回更多实例的地方)不会执行。
您必须返回一个列表,并在您的GSP文件使用<g:each>
标签(这是相当于一个for循环GSP):
def edit = {
def assetInstance = Asset.get(params.id)
if (!assetInstance) {
flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'asset.label', default: 'Asset'), params.id])}"
redirect(action: "list")
}
Sql sql = new Sql(dataSource)
def results = sql.rows("SELECT * from asset_history where id ='" + params.id + "' ")
return [results: results]
}
而且你的GSP:
<tbody>
<g:each var="result" in="${result}">
<tr>
<td>${result.id}</br></td>
<td>${result.comment}</br></td>
<td>${result.update_on}</br></td>
<td>${result.update_time}</br></td>
<td>${result.update_by}</br></td>
</tr>
</g:each>
</tbody>
由于一个奖金,这里有一些提示,将使您的应用程序看起来更好:
- 如果您不使用不返回值他们在您的GSP中,如
assertInstance
这里 - 如果您的断言历史记录是Grails域对象,请避免使用SQL并更愿意依赖Grails内置访问方法(
findBy
)或Hibernate标准。这会给你Grails对象而不是raw SQL行 - 为了可读性正确缩进你的代码。有可能你的IDE有一个可以为你做的功能。
为了得到更好的答案,你可能会对这篇文章感兴趣:http://meta.stackexchange.com/a/81648。尝试写出较短的问题,并努力写出好的英语。 – Antoine