JSF 2 - генерация изображений из двоичных данных - PullRequest
1 голос
/ 29 августа 2011

Я использую в своем проекте JSF 2 Primefaces 3.0.M2 в качестве основной библиотеки компонентов. Пока он работает очень хорошо, но компонент graphicImage, похоже, не работает. Рендеринг изображений происходит только один раз - я загружаю данную страницу, изображение показывается, когда я перезагружаю ту же страницу, изображение (streamedcontent) исчезает, и в моем журнале я получаю только

29.08.2011 08:39:03 org.primefaces.application.PrimeResourceHandler handleResourceRequest
SCHWERWIEGEND: Error in streaming dynamic resource.

Есть ли другой правильный / хороший / лучший способ отображения изображений из двоичного потока данных? Или я должен создать сервлет, который обрабатывает это для меня?

Я использую

  • Мохарра 2.1.2
  • Primefaces 3.0.M2
  • Весна 3.0.5

Ответы [ 2 ]

0 голосов
/ 03 января 2014

Вам может пригодиться этот поток stackoverflow - Как использовать p: graphicImage с StreamedContent в p: dataTable?

Но, в принципе, кажется, что в p есть по крайней мере две вещи: graphicimage, о которых вы должны знать (я не знаю, почему примитивы официальной документации и демоверсии не говорят ни слова об этом, но в любом случае)

  1. ваше изображение недоступно на этапе RENDER_RESPONSE
  2. @ ViewScoped не будет работать

Так вот код, который работал для меня

[1] Управляемый bean-компонент является областью действия сеанса, и атрибут bean-компонента не DefaultStreamedContent (который не сериализуем), а byte [].

@ManagedBean
@SessionScoped
public class ImageController implements Serializable{

    private byte[]      img;

[2] метод получения динамического изображения -

public DefaultStreamedContent getContent(){
    FacesContext context = FacesContext.getCurrentInstance();
    if (context.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) {
        return new DefaultStreamedContent();
    }else{
        if (img == null){
            return new DefaultStreamedContent();
        }else{
            return new DefaultStreamedContent(new ByteArrayInputStream(img), "image/png");
        }
    }
}
0 голосов
/ 30 августа 2011

Для меня это звучит так, как будто свойство StreamedContent управляемого компонента возвращается к нулю, поскольку компонент уничтожается и воссоздается при обратной передаче.

Это может быть потому, что ваш компонент имеет значение @RequestScoped.

Попробуйте установить боб на @ViewScoped или @SessionScoped, чтобы он сохранялся за рамками постов.

...