RichFaces: отображение всплывающего уведомления при успешной работе AJAX - PullRequest
2 голосов
/ 23 марта 2009

В настоящее время мы разрабатываем веб-магазин B2B на основе Java EE 5, JSF, Facelets и RichFaces. До сих пор эта технология работала очень хорошо, но сейчас я столкнулся с небольшой проблемой, которую просто не могу понять, как ее решить:

Продукты перечислены в виде таблиц, где каждый элемент можно добавить в корзину, нажав на маленький значок в конце строки. Добавление продукта осуществляется через AJAX, чтобы избежать полной перезагрузки страницы. Это работает без проблем, просто используя h:dataTable и a4j:commandLink для вызова метода действия, который добавляет выбранный продукт в корзину. Даже повторный рендеринг общей суммы корзины, всегда видимой на боковой панели, работает правильно.

В связи с характером AJAX, нет видимых признаков (кроме изменяющейся суммы сбоку), что операция была успешной или, по крайней мере, была завершена. Теперь я хочу добавить маленькое «всплывающее» окно, которое становится видимым рядом со значком добавления после завершения AJAX-операции, сообщая, что элемент был добавлен в корзину. Это поле должно автоматически исчезнуть через несколько секунд.

Это то, что, по моему мнению, должно работать (css-классы popup_message и popup_content заставляют прямоугольник плавать над позицией, в которой находится его разметка):

<h:dataTable ....>
    ...
    <h:column>
        <a4j:commandLink action="...">
            <rich:effect event="oncomplete" targetId="addedMessage"
                 type="Appear" />
            <rich:effect event="oncomplete" targetId="addedMessage"
                 type="Appear" params="{delay:3.0, duration:1.0}" />
        </a4j:commandLink>

        <a4j:outputPanel id="addedMessage" styleClass="popup_message"
            style="display: none">
            <a4j:outputPanel layout="block" styleClass="popup_content">
                <h:outputText value="Item added!" />
            </a4j:outputPanel>
        </a4j:outputPanel>
    </h:column>
</h:dataTable>

К сожалению, окно вообще не отображается. Если я изменю event эффекта «Появиться» на onclick, он будет работать почти так, как ожидалось. Он отображается сразу после щелчка значка и исчезает через 3 секунды после завершения операции AJAX. Но я не хочу, чтобы он появлялся сразу после щелчка, потому что было бы неправильно указывать, что элемент был добавлен в корзину, хотя на самом деле операция еще даже не началась. Это становится еще более важным, когда я хочу указать на какую-либо ошибку или включить в поле некоторую информацию, относящуюся к конкретному элементу, которая доступна только после добавления элемента.

Так есть идеи, как это сделать? И почему добавление двух эффектов для одного и того же события не работает?

(Я уже посмотрел пример эффекта из живой демонстрационной версии RichFaces . Примеры работают почти одинаково, за исключением того, что они добавляют второй эффект с явным указанием атрибута for. Но даже это не работает для меня.)

Обновление: Я пытался использовать rich:toolTip для этой цели, что на самом деле кажется довольно гибким. Но независимо от того, что я делаю, я не могу прикрепить что-либо к событию "oncomplete" (я также пробовал просто "complete") a4j:commandLink, кроме одного эффекта ... кажется, есть какая-то ошибка / недокументированное поведение относительно этого события. Я только что нашел этот отчет об ошибке: RF-3427

Ответы [ 3 ]

0 голосов
/ 24 октября 2013

вы можете попробовать rich:notify для этого http://showcase.richfaces.org/richfaces/component-sample.jsf?demo=notify&skin=blueSky

0 голосов
/ 24 октября 2013

Вы пробовали rich:status? Я не буду размещать кусок кода. Я думаю, с документами все будет в порядке.

http://livedemo.exadel.com/richfaces-demo/richfaces/status.jsf

0 голосов
/ 23 марта 2009

Ваше определение targetId вне параметров. Что вы хотите сделать, это:

<rich:effect event="oncomplete" type="Appear" params="targetId:'addedMessage',delay:3.0, duration:1.0" />

Попробуйте, и я думаю, что это сработает.

...