Переключить рендеринг изображения с помощью AJAX?

Как я могу показать изображение в зависимости от логической переменной состояния, которая вызывается кнопкой? Я не хочу перезагружать всю страницу, а только это конкретное изображение.

Страница Facelets:

 </h:form>
    <h:commandButton value="test" action="#{bean.toggleStatus}">
        <f:ajax render="image"/>
    </h:commandButton>
    <h:graphicImage id="image" value="status.gif" rendered="#{bean.status}"/>
 </h:form>  

Класс поддержки:

    class Bean {

        private boolean status = false;

        public void toggleStatus() {
            status = true;
        }

        //getter, setter
    }

Есть идеи, что здесь может быть не так?

1 ответ

Решение

Вы не можете ajax-обновить элемент HTML, который не отображается на стороне HTML. Оберните его в компонент, который всегда отображается и обновите его.

Например

<h:form>
    <h:commandButton value="test" action="#{bean.toggleStatus}">
        <f:ajax render="image"/>
    </h:commandButton>
    <h:panelGroup id="image">
        <h:graphicImage value="status.gif" rendered="#{bean.status}"/>
    </h:panelGroup>
</h:form>

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

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