o:graphicImage не изменяется при удалении или обновлении фактического изображения в базе данных

Я пытаюсь отобразить, который хранится в базе данных. у меня есть <o:graphicImage value="#{image.getById(1)}" />,

Примечание. Идентификатор (1) предназначен только для тестирования.

Моя собственность выглядит так:

@Lob
private byte[] image;

и мой дао / сервис это:

@Name
@ApplicationScoped
public class Images {

    @Inject
    private UserDAO userDAO;

    public byte[] getById(int id) {
        return userDAO.getUserByID(id).getImage();
    }

К конкретной проблеме:

Я только что реализовал это, и изображение отображается правильно. Я установил изображение вручную NULL в базе данных.

Мое предположение: изображение не найдено и изображение не отображается (или типичное изображение "изображение не найдено").

Но: отображается старое изображение. Даже после перезагрузки сервера и чистой. Ничего не изменилось. Я пытался загрузить другое изображение в базу данных - тот же результат.

В чем здесь проблема? Где моя вина? Как я могу это исправить?

1 ответ

Решение

Изображение кэшируется клиентом. <o:graphicImage> очень эффективен в этом.

В основном вам нужно очистить кеш браузера, или выполнить принудительную перезагрузку в браузере, или открыть окно инкогнито.

Один из способов избежать этого состоит в том, чтобы включить метку времени последнего изменения изображения в lastModified атрибут, который может быть java.util.Dateили java.lang.Long представляющий время эпохи. Лучше всего добавить это свойство к вашей сущности.

<o:graphicImage ... lastModified="#{image.lastModified}" />

В конечном итоге это v= параметр запроса в сгенерированном URL-адресе изображения, таким образом обманывая кеш браузера при его изменении.

Другой способ - просто изменить идентификатор изображения в аргументе метода. С этой точки зрения также немного странно, если вы продолжаете предоставлять старый идентификатор изображения в ответе HTML, пока этот идентификатор больше не существует в базе данных.

Смотрите также:

Другие вопросы по тегам