2011-09-13 10 views
0

コマンドオブジェクト内のバイト[]にイメージを保存し、それをcreateFlow Webflowの次の段階に表示したいとします。Grails Webflow display image-flow scope

私は、Webflow中に画像を保存するためにファイルシステムやデータベースシステムを使用することを明確にしています。

典型的には、画像を表示するために、私は、GSPからrenderImageを呼び出すであろう:

class ArtefactController { 

    def createFlow = { 
     ............ 
    } 

def renderImage = { 

    def ArtefactInstance = Artefact.findById(params.id) 
    if(ArtefactInstance?.image) { 
     response.setContentLength(ArtefactInstance.image.length) 
     response.outputStream.write(ArtefactInstance.image) 
    } 
    else { 
     response.sendError(404) 
    } 
} 

を但しWebflowのための私はGSPからrenderFlowImageをコールしようとする:

def renderFlowImage = { 
    if(flow.artefactCommand?.image) { 
     response.setContentLength(flow.artefactCommand.image.length) 
     response.outputStream.write(flow.artefactCommand.image) 
    } 
    else { 
     response.sendError(404) 
    } 
} 

流量範囲アクセスできない

提案がありますか?

答えて

0

私はあなたのようなimgタグを介して第二のHTTPリクエストを使用して、フローのビューでrenderFlowImageアクションを打っていると仮定:

<img src="${createLink(action:'renderFlowImage')}" /> 

一つには、必要に、これは動作しませんgrailsがリクエストとフローを照合するために使用する 'flowExecutionKey'を渡します。 これを回避することはできますが、imgタグのデータURIを使用して、フローの次のビューのレンダリング段階でイメージをレンダリングする方がよい場合があります。これは、データuriを使用してインラインイメージをレンダリングするための便利なタグ(とりわけ)を提供するレンダリングプラグインで簡単に行うことができます。 だから次のフロービューでは、レンダリングプラグインの「インライン」タグのいずれかへの呼び出しで既存のimgタグを置き換えることができます:

<rendering:inlineJpeg bytes="${artefactCommand.image}" /> 

しかし、注意してください - データURIのアプローチにはいくつかの制限にはあります注意してください(http://www.7cynics.com/webdesign/css/css-inline-images-data-uri.html参照)。

+0

回答ありがとうございます。 flowExecutionKeyの回避策についてどうご存知ですか? – user898100

+0

回避策としては、次の記事(http://bit.ly/8NnO8vおよびhttp://bit.ly/9ApKP7)に記載されている手法を適用できると思っていました。しかし、私は個人的には、画像のレンダリングに専念するステップで自分の流れを汚染したくないでしょう。また、 "Ajaxflow"プラグインを見ることもできます。 –