我正在两个表asset和asset_history中保存值。创建资产我正在资产表中保存值,如果有任何更新,我希望它存储在资产和asset_history的id基础上。现在我想在编辑页面中获取两个表值以获取asset_history我使用sql查询来获取asset_history.all中的值正在运行良好但是它正在以数组列表值(所有更新列表显示在单行中)。当我在编辑页面中的updata值应保存并显示在asset_history的不同行中。因为我用于循环,但它没有获得价值。
资产表我有以下字段: -
id
asset_title
asset_description
client_id
comment
status
etc...
在asset_history字段中: -
id
comment
update_on
update_by
status
如果资产字段中有任何更新。更新列表应保存在asset和asset_history中。我已使用查询进行更新(如下所示)。但它在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中显示并在单行中显示更新列表。但是我希望在每次更新时将它显示在单独的行中。我使用for循环但是它不起作用。请指导我来解决这个问题。
答案 0 :(得分:2)
您的问题是您只能从Groovy中的函数(以及我知道的所有其他语言)中返回一个值。因此,for循环中的第一次迭代将返回,并且不会执行以下迭代(您希望返回更多实例的位置)。
您必须返回一个列表并在GSP文件中使用<g:each>
标记(这相当于GSP中的for循环):
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>
作为奖励,这里有一些技巧可以让您的应用程序看起来更好:
assertInstance
findBy
)或Hibernate Criteria。这将为您提供Grails对象而不是原始 SQL行