p:dataTable livescroll 覆盖 js 函数



JSF-2.0, Mojarra 2.1.19, PrimeFaces 3.4.1

从我上一个问题可以看出,我正在使用p:dataTable来显示状态/评论模块。还有一个JS/jQuery函数,可以编辑datatable行的CSS;

jQuery(document).ready(function() {
    var rowSize = '#{statusBean.size}';
    for (var i = 0; i < rowSize; i++) {
        var rowIndex = i;
        var inputTextStr = 'dataTableForm' + ':dataTable:' + rowIndex + ':commentInput';
        var inputText = $(document.getElementById(inputTextStr));
        inputText.css({'box-shadow':'0 0 5px #EB2F28'});
    }
});

p:dataTable是具有liveScrolling=true的常规p:inputText,并假设它有一个且唯一具有上述函数修改的CSS的。

p:dataTable有很多行时出现问题。假设用户向下滚动,live scroll表的事件被触发(ajax 请求(,并且表加载更多行,但它使用常规 CSS 加载p:inputText组件。函数无法将 css 应用于新近加载的行。

因此,需要捕获该liveScroll事件或JS函数在每次更新时工作p:dataTable

没有内置的 AJAX 事件可以处理这种情况,因此您必须自己执行此操作。我会尽量给你一些建议。

首先使用为此创建函数重新组织您的 JavaScript,并在加载页面中调用该函数:

function applyMyCSS() {
    var rowSize = '#{statusBean.size}';
    for (var i = 0; i < rowSize; i++) {
        var rowIndex = i;
        var inputTextStr = 'dataTableForm' + ':dataTable:' + rowIndex + ':commentInput';
        var inputText = $(document.getElementById(inputTextStr));
        inputText.css({'box-shadow':'0 0 5px #EB2F28'});
    }
}
jQuery(document).ready(function() {
    applyMyCSS();
});

现在,您应该以某种方式在后备 Bean 中处理此 AJAX 请求。我稍微调查了一下,发现当滚动发生时,发送了名称为 yourDataTableId_scrolling 的特定参数,例如 myForm:myTable_scrolling ,并且此参数的值为 true

将其添加到页面中的某个位置,最好在顶部的某个位置:

<f:metadata>
  <f:event type="preRenderView" listener="#{myBean.onPageLoad('clientIdOfComponent')}"/>
</f:metadata>

岸上从页面中放置确切的客户端 ID。为此,您可以使用一些实用程序 PrimeFaces 函数,例如#{p:component('id')}获取客户端 ID。此事件将在视图呈现之前和每个请求(AJAX 或非 AJAX(调用 onPageLoad() 函数。在该函数中,您将过滤liveScroll事件并处理它:

public void onPageLoad(String datatableId) {
  FacesContext fc = FacesContext.getCurrentInstance();
  if (RequestContext.getCurrentInstance().isAjaxRequest() && 
          "true".equals(fc.getExternalContext().getRequestParameterMap().get(datatableId + "_scrolling")) {
    RequestContext.getCurrentInstance().execute("applyMyCSS()");
  }
}

请注意,这不是记录的行为,可以在将来的版本中更改(但我不希望这样(。我还创建了一个添加此功能的问题,也许很快就会添加。

相关内容

  • 没有找到相关文章

最新更新