我们目前正在开发一个基于 Java EE 5、JSF、Facelets 和 RichFaces 的 B2B 网上商店。到目前为止,该技术确实运行得很好,但现在我面临一个小问题,我只是不知道如何解决:
产品以表格形式列出,通过单击行末尾的小图标,可以将每个项目添加到购物篮中。添加产品是通过 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
,它几乎可以按预期工作。单击图标时立即显示,AJAX 操作完成后 3 秒消失。但我不希望它在单击后立即出现,因为指示该项目已添加到购物篮是错误的,而实际上操作尚未开始。当我想要指出一些错误或想要在框中包含一些项目特定信息时,这变得更加重要,这些信息仅在添加项目后才可用。
那么有什么想法可以做到这一点吗?为什么为同一事件添加两种效果不起作用?
(我已经看过 RichFaces 现场演示中的效果示例。这些示例的工作原理几乎相同,只是它们添加了第二个效果并明确声明了
for
属性。但即使这样也不起作用对我来说。)
更新:我尝试过使用
rich:toolTip
来实现此目的,这实际上似乎非常灵活。但无论我做什么,我都无法将任何内容附加到 a4j:commandLink
的“oncomplete”(我也尝试过“complete”)事件,除了一个效果......似乎存在一些错误/未记录的行为关于该事件。我刚刚发现这个错误报告:RF-3427
你尝试过吗
rich:status
?我不会发布一段代码。我认为文档会做得很好。
http://livedemo.exadel.com/richfaces-demo/richfaces/status.jsf
您在参数之外定义 targetId。你想做的是:
<rich:effect event="oncomplete" type="Appear" params="targetId:'addedMessage',delay:3.0, duration:1.0" />
尝试一下,我认为它会起作用。