2015-05-26 9 views
1

У меня есть два <o:graphicImage>, чтобы отображать сохраненное изображение и фиктивное изображение, если нет изображения. Фактически размер сохраненных изображений может быть равен нулю. Если это так, отображаются первые <o:graphicImage, но изображение пуст и не отображается правильно.Избегайте рендеринга пустого массива байтов с <o: graphicImage>

<o:graphicImage id="image" alt="Image" 
     lastModified="#{userProfile.user.lastModified}" 
     rendered="#{not empty images.getImage(userProfile.user.id)}" 
     value="#{images.getImage(userProfile.user.id)}" 

<o:graphicImage name="images/profile.png" width="125" 
     rendered="#{empty images.getImage(userProfile.user.id)}" /> 

Как отобразить фиктивное изображение, если изображение пользователя пуст или имеет длину/размер 0?

ответ

2

Лучше не называть этот метод стримера изображения в атрибуте rendered. Он вызывается несколько раз в течение жизненного цикла JSF, тем самым неэффективно получая байты изображения из базы данных каждый раз.

Модель также не выглядит правильно на первом месте. Я предлагаю изменить модель. Сделайте идентификатор изображения FK таблицы User или, возможно, UserProfile.

@Column(name="image_id") 
private Long imageId; 

Затем, когда пользователь загружает/устанавливает изображение, сохраните идентификатор изображения. Таким образом, вы можете использовать его, как показано ниже:

<o:graphicImage 
    value="#{images.getImage(userProfile.user.imageId)}" 
    rendered="#{not empty userProfile.user.imageId}" /> 

<h:graphicImage 
    name="images/profile.png" 
    rendered="#{empty userProfile.user.imageId}" /> 

Не забудьте изменить растяжку изображения, чтобы получить изображение с помощью своего собственного ID вместо идентификатора пользователя.

+0

Как сохранить сохраненный идентификатор изображения? Просто создайте новое (автоматически сгенерированное) значение после загрузки изображения? Является ли сохранение изображения в виде массива байтов и доступ к нему с помощью компонента «ApplicationScoped» просто отлично? – alexander

+0

Просто используйте ПК (каждая таблица сущностей должна иметь один). Боб не должен содержать переменные, зависящие от запроса, они должны быть неактивными. – BalusC

+0

Ну, вы сказали «FK» в пользовательской таблице/сущности. Итак, я немного смущен. Должен ли я хранить изображения в новой таблице? Компонент 'ApplicationScoped' - это' '. Это тоже неправильно? – alexander