2009-03-23 11 views
2

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

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

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

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

<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. Но я не хочу, чтобы он появлялся сразу после щелчка, потому что было бы неправильно указывать, что элемент был добавлен в корзину, когда на самом деле операция еще не началась. Это становится еще более важным, когда я хочу указать некоторую ошибку или хочу включить определенную информацию о конкретном элементе в поле, доступное только после добавления элемента.

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

(я уже смотрел на the effect-example from the RichFaces live demo. Примеры этого почти работают так же, execept, что они добавляют второй эффект с явным указанием атрибута for. Но даже это не работает для меня.)

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

ответ

-1

Ваш определяющий targetId вне параметров. Что вы хотите сделать:

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

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

+0

Я не знаю, если я попробовал это уже, но мы увидим. Если это работает, документы RichFaces нуждаются в серьезной работе ... –

+0

Пробовал, но это не сработает, но спасибо в любом случае. Я посмотрел на сгенерированный html/javascript, и, как кажется, для каждого события может быть только один эффект rich: effect (последний эффект отменяет любые ранее определенные эффекты для этого события). Теперь я хотел бы знать, как работает пример демонстрационной демонстрации ... –