2013-05-28 63 views
0

圖片控制器具有如下功能:運行/執行在GSP /視圖的查詢Grails中

def scaled = { 
    log.debug("SCALED IMAGE " + params) 
    response.setContentType('image/jpeg') 
    response.setHeader('Cache-control', 'no-cache') 
    def userId = session.selectedUser.id 
    if(params.userId){ 
     userId = params.userId 
    } 
    if(params?.id != null && !(params?.id.empty)){ 
     params.maxWidth?: 20.00 
     params.maxHeight?: 20.00 
     response.outputStream << imageProxyService.loadImage(params.id, securityService.passwordEncoder(userId.toString()),params.maxWidth, params.maxHeight) 
    } 
    } 

和個人資料照片的文件名被存儲在用戶表中。 用戶有很多狀態,我想根據顯示的狀態加載用戶的個人資料照片。我的狀態GSP看起來是這樣的:

<g:each in="${statusList}" status="i" var="status" status="i"> 
      <tr class="${(i % 2) == 0 ? 'odd' : 'even'}"> 
      <tr><td><img id="profile_photo" src="${createLink(controller:'image', action:'profilePhoto', id:status.photo)}" alt="" title="" /> 
       </td></tr> 
      </tr> 
     </g:each> 

查詢我的狀態控制器用於:

def alllist = { 
     log.debug("BEGIN IWI PROFILE") 
     def statusList = [] 


      def sql = new Sql(dataSource); 

      def statusQuery = """SELECT c.id, c.status_message, c.status_type as profile, se.id, se.photo FROM user_account se, status c 
        WHERE 
        c.user_account_id = se.id 
        GROUP BY se.id, c.id, c.status_message, c.status_type, se.photo""" 


      def result = sql.rows(statusQuery); 

      def userQuery = """not sure """ 
      if (result){ 
       log.debug("GOT SOME RESULTS IN PERSONAL user" + result) 
       result.each() { status -> 
        def userResult = sql.firstRow(userQuery, [status.id]) 
        if (userResult){ 
         status['userId'] = userResult.id 
        } else { 
         status['userId'] = "" 
        } 
        statusList += status 
       } 
      } 


     render(template: "alllist", model: [statusList: statusList]) 

請注意:這種方式我收到的所有照片都正確的,但照片只用於會話的用戶顯示。

<img id="profile_photo" src="/myApp/image/profilePhoto/9edd692580d148c791c6c2aa3510605a95ba6de6.jpg" alt="" title=""/> 
+1

你可以發佈你的域對象? – leebutts

+0

請檢查更新後的問題 – desicreatioNZ

回答

2

我會創建一個TagLib。您實際渲染照片的方式取決於UserAccount.photo字段中存儲的內容。我會假設它是一個圖像的絕對URL。

class UserTagLib { 

    def photo = {attrs -> 
     UserAccount u = attrs.user 
     out << "<img src=${u.photo}/>" 
    } 

} 

你可以使用它在你的GSP,如:

<user:photo user="${status.userAccount}"/> 

..assuming你遍歷狀態對象的列表在一個名爲狀態

+1

非常有用... 如果我只是將filename.jpg存儲到照片中,那我該怎麼辦呢? 也有任何動態使用圖片標籤的方法。 你的是: 我可以使用 它會接受嗎? – desicreatioNZ

+0

這是我發現的一個例子:http://gamerzfever.wordpress.com/2012/10/02/render-image-file-located-outside-application-context-in-gsp-grails/ – leebutts

1

變量您可以使用此一:

<img src="http://applicationUrl/images/${u.photo}" /> 

<img src="${createLink(dir:'images',file: u.photo}" /> 

,他們可以使用,但作爲創建鏈接現在已被棄用,我建議使用:

http://grails.org/doc/2.2.1/ref/Tags/resource.html

資源爲同一

<img src="${resource(dir: 'images', file: 'file.jpg')}"/> 

的更多信息可以在這裏找到

關於該資源

+0

謝謝你是syntex我是尋找... 更多學習...我如何將圖像變量設置爲局部變量並在每個變量中以這種方式使用它? – desicreatioNZ

+0

請再次檢查我的問題,我希望現在更清楚.. – desicreatioNZ

+0

http://devdevdev.wordpress.com/2009/01/13/displaying-images-from-database-records-in-grails-pages/ 檢查這一個我認爲它應該可以幫助你從數據庫 –