Grails Webflow отображаемое изображение - область видимости потока - PullRequest
0 голосов
/ 13 сентября 2011

Я сохранил изображение в байте [] в объекте команды и хочу отобразить его на следующем этапе веб-потока createFlow.

Я пытаюсь избежать использования файловой системы и / или системы баз данных для хранения изображения во время веб-потока.

Как правило, чтобы просмотреть изображение, я бы вызвал renderImage из gsp:

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)
    }
}

однако для веб-потока, когда я пытаюсь вызвать renderFlowImage из gsp:

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

Объем потока недоступен.

Есть предложения?

1 Ответ

0 голосов
/ 13 сентября 2011

Я предполагаю, что вы выполняете действие renderFlowImage в представлении вашего потока со вторым http-запросом через тег img, например:

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

Это не будет работать, потому что, с одной стороны, вам нужнопередать 'flowExecutionKey', который Grails использует для сопоставления запроса с потоком.Это можно обойти, но вам может быть лучше просто визуализировать изображение на этапе рендеринга следующего представления вашего потока с помощью URI данных в теге img.Вы можете легко сделать это с помощью плагина рендеринга, который предоставляет несколько удобных тегов (среди прочего) для рендеринга встроенных изображений с использованием данных URI.Таким образом, в следующем представлении потока вы можете заменить существующий тег img вызовом одного из встроенных тегов плагина рендеринга:

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

Но будьте осторожны - существуют некоторые ограничения в подходе с использованием URI данныхбыть в курсе (см. http://www.7cynics.com/webdesign/css/css-inline-images-data-uri.html).

...