2011-11-30 150 views
1

我将值保存在两个表中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循环这个,但它不工作。请指导我解决这个问题。

+1

为了得到更好的答案,你可能会对这篇文章感兴趣:http://meta.stackexchange.com/a/81648。尝试写出较短的问题,并努力写出好的英语。 – Antoine

回答

2

你的问题是,你只能从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有一个可以为你做的功能。
相关问题