динамическое изображение из BufferedImage [дубликат]

Короткий ответ: вам нужно выполнить обратный вызов следующим образом:

function callback(response) {
    // Here you can do what ever you want with the response object.
    console.log(response);
}

$.ajax({
    url: "...",
    success: callback
});
2
задан BalusC 3 June 2015 в 06:15
поделиться

1 ответ

Это невозможно напрямую с <h:graphicImage>. Он может указывать только на URL, а не на byte[] или InputStream. В принципе, вам нужно убедиться, что эти байты напрямую доступны в качестве ответа HTTP по данному URL-адресу, который затем можно использовать в <h:graphicImage> (или даже в обычном HTML <img>).

При условии, что вы идентифицируете изображение по его ID так:

<h:graphicImage value="/image/#{someBean.imageId}" />

Вот пример запуска такого сервлета:

@WebServlet("/image/*")
public class ImageServlet extends HttpServlet {

    @EJB
    private ImageService service;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Long id = Long.valueOf(request.getPathInfo().substring(1));
        Image image = service.find(id);
        response.setContentType(getServletContext().getMimeType(image.getName()));
        response.setContentLength(image.getBytes().length);
        response.getOutputStream().write(image.getBytes());
    }

}

Более продвинутый абстрактный шаблон для статического ресурса сервлет, поддерживающий HTTP-кеширование, можно найти в этом ответе , а также конкретный пример для обслуживания из базы данных.

Если вы используете библиотеку служебных программ JSF OmniFaces в среде JSF 2.2 + CDI, вы можете вместо этого использовать свой <o:graphicImage> , который можно использовать гораздо более интуитивно.

<o:graphicImage value="#{imageBean.getBytes(someBean.imageId)}" />

@Named
@ApplicationScoped
public class ImageBean {

    @EJB
    private ImageService service;

    public byte[] getBytes(Long imageId) {
        return service.getImageBytes(imageId);
    }

}
6
ответ дан Community 25 August 2018 в 22:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: