2015-09-04 88 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

非常感謝你:) –