我希望能够使用 JSF/Seam/RichFaces 进行 Ajax 调用,并使用相关的 h:messages 组件更新页面。这没有问题。我能够执行适当的重新渲染。但是,我也希望能够利用 rich:effect 使它更漂亮一些。理想情况下,我希望能够让消息淡入然后在用户单击它们时消失。但是,到目前为止,我一直无法使它正常工作。
有没有人让这样的场景起作用?有比我更了解 JSF/Seam 的人有什么好的建议吗?提前致谢!
最佳答案
虽然我不关心 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 将始终显示。
关于java - FacesMessages 和 rich :effect?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2760832/