为啥我的大型 JSF 数据表不是仅在 IE 中填充?

Posted

技术标签:

【中文标题】为啥我的大型 JSF 数据表不是仅在 IE 中填充?【英文标题】:Why is my large JSF data table is not populating only in IE?为什么我的大型 JSF 数据表不是仅在 IE 中填充? 【发布时间】:2012-03-15 16:06:55 【问题描述】:

我正在尝试使用 JSF 中的 htmlDataTable 动态生成表。当我给出的行数和列数大于 25 时,某些单元格不会仅在 IE 中填充,而且速度非常慢。但是,我可以在使用 Firebug 调试代码时看到该值。它在 Firefox 和 Chrome 中运行良好。

这是怎么引起的,我该如何解决?

【问题讨论】:

【参考方案1】:

众所周知,Internet Explorer 的表格渲染器非常糟糕。尤其是当列和表嵌套过度时。

除了通过引入延迟加载和分页来缩小表格之外没有其他解决方案,这样一次只能显示 10~100 行。如有必要,添加搜索过滤器。额外的好处是它也更加用户友好。例如,Google 也不会在没有过滤和分页的情况下显示怪物表中的所有网站链接。

如果您碰巧使用 PrimeFaces,请使用 <p:dataTable> with LazyDataModel

另见:

Efficient JSF Pagination

更新 根据 cmets,如果您无法更改服务器端代码,则没有其他选择。您最好的选择可能是通知最终用户她/他应该使用真正的浏览器。

例如

<script>
    var ie = /*@cc_on!@*/false;

    if (ie) 
        window.location = 'some_page_which_recommends_different_browser.xhtml';
    
</script>

【讨论】:

这个主意不错。但是,如果我错了,请纠正我,但我认为我不能实现它,因为我应该以网格的形式显示数据,其中行和列的大小可以高达 100。我的前任使用 HtmlDataTable 来显示网格,我现在无法更改它。所以,我认为分页在这里不适用。 还有其他选择吗? 使用 javascript 检测客户端并重定向页面或显示一些警告&lt;div&gt;,建议用户改用真正的浏览器,例如Chrome、Firefox 等 我想知道我们是否可以使用这种方法。我们可以在将数据存储在浏览器中的同时以网格视图的形式显示数据,比如 10 x 10。一旦用户滚动网格,我们可以相应地显示数据,同时隐藏先前的显示。类似的东西..:P 这将是大量的 JS/ajax 工作。这在 JSF 中很难实现(需要自定义组件)。我会寻找诸如 PrimeFaces 之类的组件库:primefaces.org/showcase/ui/datatableScrolling.jsf

以上是关于为啥我的大型 JSF 数据表不是仅在 IE 中填充?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 JSF + Spring Web 应用程序输出 JSF 源代码而不是解释的 HTML 页面?

为啥我的 CUDA 代码无法正常工作以零填充大型矩阵?

JSF 中未填充下拉列表

仅在验证成功时渲染组件

为啥我的 SwiftUI 列表填充相同的项目 4 次而不是全部 4 个项目?

JSF/Facelets:为啥将 JSF/Facelets 与 HTML 标签混合不是一个好主意?