2015-09-04 67 views
2

如何使用jsf primefaces在指定的一组秒后隐藏消息(对于onedit和oncancel或单独使用);隐藏p:某些秒后的消息

<p:messages id="messages" showDetail="true" autoUpdate="true" closable="true" /> 
<p:dataTable id="platform" var="platform" value="#{platformMB.platformList}" editable="true"> 
    <p:ajax event="rowEdit" listener="#{platformMB.onEdit}" 
      update=":formConfig:messages"/> 
    <p:ajax event="rowEditCancel" listener="#{platformMB.onCancel}" 
      update=":formConfig:messages"/> 
.... 
+0

如果你想阻止表明添加全局= false添加到AJAX事件 –

+0

防止消息?不,让它在显示几秒钟后消失 –

回答

3

您可以通过钩在特殊pfAjaxComplete事件的完整的PrimeFaces Ajax请求调用JS功能。

$(document).on("pfAjaxComplete", function() { 
    // ... 
}); 

您可以使用JS setTimeout()调度功能后ñ毫秒被调用。

setTimeout(function() { 
    // ... 
}, 1000); 

您可以使用jQuery $.hide(),或更好,$.slideUp()隐藏DOM元素。

$(element).slideUp(); 

你当然不想太早隐藏它们。让我们假设我们以3秒的最小超时开始为人眼的“预热”时间,然后为消息中的每个单词计算200ms。

现在,让我们把它放在一起:

$(document).on("pfAjaxComplete", function() { 
    var $messages = $(".ui-messages div"); 

    if ($messages.length) { 
     var wordCount = $messages.text().split(/\W/).length; 
     var readingTimeMillis = 3000 + (wordCount * 200); 

     setTimeout(function() { 
      $messages.slideUp(); 
     }, readingTimeMillis); 
    } 
}); 
+0

如果我太初学者,请打扰我......但是我能把它放在哪里? Js脚本?在身体里 ? –

+0

只要'$'在上下文中可用,就可以在任何地方使用。正常的做法是将JS代码放入一个JS文件中,然后将其包含在HTML头文件中。另见例如http://stackoverflow.com/questions/8367421 – BalusC

+0

非常感谢你:) –