Я делаю именно это, хотя я не беспокоюсь о rich:effect
.
Я использую jQuery. Это личное предпочтение, но я нахожу его намного проще и прямее, чем использование rich: effect (основанного на Scriptaculous). Стоит взглянуть на документацию jQuery Effects .
Пример:
Добавьте jquery на свою страницу (поставляется с richfaces):
<a:loadScript src="resource://jquery.js"/>
Для удобства назначьте jQuery $ j (добавьте это в свой javascript):
$j = jQuery.noConflict();
Сообщения Div:
<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>
Некоторые JavaScript, чтобы скрыть и показать div:
function hideMessages() {
$j("div#messagetextPanel").fadeOut("slow");
}
function showMessages() {
$j("div#messagetextPanel").fadeIn("fast");
}
Теперь вам просто нужно найти лучший способ вызова showMessages () при завершении вызова (например, использовать oncomplete на вашем a4j:commandButton
и т. Д.).
Лично я предпочитаю не влиять на отображение div, чтобы я мог использовать ajaxRendered для обработки всего. Вы можете сделать это, заменив первую строку на:
<a:outputPanel id="messagetextPanel" ajaxRendered="true" layout="block" style="z-index:100; display: #{empty facesContext.maximumSeverity ? 'none' : 'block'};">
Таким образом, мне не нужно иметь никакого кода на моей кнопке / ссылке / поддержке, и сообщения FacesMessages всегда будут отображаться, когда мой внутренний код решит создать его.