現在、Java EE 5、JSF、FaceletsおよびRichFacesに基づいてB2B Webショップを開発中です。この技術はこれまでのところ非常にうまく機能していましたが、今は小さな問題に直面しています。私は解決方法を理解できません: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>
残念ながら、それはまったくボックスを表示しません。 。 「Appear」エフェクトのevent
をonclick
に変更すると、ほぼ同じように動作します。アイコンがクリックされるとすぐに表示され、AJAX操作が完了してから3秒後に消えます。実際に操作がまだ開始されていないときに、アイテムがバスケットに追加されたことを示すのは間違っているため、クリック直後には表示したくありません。これは、何らかのエラーを示すか、アイテム固有の情報をボックスに追加したい場合に、アイテムが追加された後にのみ使用可能になります。
どのようにすればいいですか?同じイベントで2つのエフェクトを追加しても効果がないのはなぜですか?
(例はほとんど同じように機能するか、私はすでにthe effect-example from the RichFaces live demo見てきました。、彼らは明示的for
属性を記述して第二の効果を追加することをexecept。しかし、たとえこれが私のために動作しません。)
更新:私はこの目的のために実際にはかなり柔軟に見えるrich:toolTip
を使ってみました。しかし、私が何をするにしても、私はa4j:commandLink
のイベント "oncomplete"(私はちょうど "完全"を試みた)に何も付けることはできませんが、1つの効果を除いて...そのバグ/イベント。私はちょうどこのバグレポートを見つけました:RF-3427
私はすでにそれを試みた場合、私は知りませんが、我々は表示されます。それがうまくいくと、RichFacesのドキュメントは深刻な作業を必要とします... –
それは試しても動作しませんが、とにかく感謝します。私は、生成されたhtml/javascriptを見てきました。そして、見た目には、1つのリッチ:エフェクトがイベントごとに存在することができます(最後のエフェクトは、そのイベントの以前に定義されたエフェクトをオーバーライドします)。今私はライブデモの例がどのように動作するかを知りたいです... –