我就是这么做的,尽管我不关心rich:effect。
我使用 jQuery。这是个人喜好,但我发现它比使用rich:effect(基于Scriptaculous)更容易和直接。值得快速查看jQuery Effects documentation。
一个例子:
将 jquery 添加到您的页面(带有richfaces):
<a:loadScript src="resource://jquery.js"/>
为方便起见,将 jQuery 分配给 $j(将其添加到您的 javascript 中):
$j = jQuery.noConflict();
消息区:
<a:outputPanel id="messagetextPanel" ajaxRendered="true" layout="block" style="z-index:100; display:none;">
<s:div styleClass="messagetext" rendered="#{not empty facesContext.maximumSeverity}">
<h:messages infoClass="infomessage" errorClass="errormessage" warnClass="warningmessage" layout="list" />
<s:div styleClass="messageClose">
<a onclick="hideMessages();">#{messages['messages.close']}</a>
</s:div>
</s:div>
</a:outputPanel>
一些用于隐藏和显示 div 的 javascript:
function hideMessages() {
$j("div#messagetextPanel").fadeOut("slow");
}
function showMessages() {
$j("div#messagetextPanel").fadeIn("fast");
}
现在您只需要找出在完成通话时调用 showMessages() 的最佳方式(例如,在您的 a4j:commandButton 上使用 oncomplete 等)。
我个人更喜欢不影响 div 的显示,这样我就可以使用 ajaxRendered 来处理所有事情。您可以通过将第一行替换为:
<a:outputPanel id="messagetextPanel" ajaxRendered="true" layout="block" style="z-index:100; display: #{empty facesContext.maximumSeverity ? 'none' : 'block'};">
这样我就不必在我的按钮/链接/支持上有任何代码,并且当我的后端代码决定创建一个时,FacesMessages 将始终显示。