Primefaces DataTable、延迟加载和每行命令按钮

     2023-05-07     79

关键词:

【中文标题】Primefaces DataTable、延迟加载和每行命令按钮【英文标题】:Primefaces DataTable, lazy loading and CommandButton per row 【发布时间】:2012-08-08 18:27:41 【问题描述】:

我有这个简单的页面:

<h:form id="form">

    <p:dataTable value="#testBean.unitTypeModel" var="elem" lazy="true" rows="10">
        <p:column headerText="class">#elem.class.simpleName</p:column>
        <p:column headerText="code">#elem.code</p:column>
        <p:column headerText="description">#elem.description</p:column>
        <p:column headerText="action">
            <p:commandButton action="test2" icon="ui-icon ui-icon-wrench" value="edit">
                <f:setPropertyActionListener target="#testBean.selection" value="#elem"/>
            </p:commandButton>
        </p:column>
    </p:dataTable>

    <p:commandButton action="test2" icon="ui-icon ui-icon-wrench"/>

</h:form>

并且DataTable 内的CommandButton 不起作用,只是刷新页面。 但是外面的那个在工作。

如果我这样更改valuelazy

<h:form id="form">

    <p:dataTable value="#testBean.unitTypeModel.load(0, 10, null, null, null)" var="elem" lazy="false" rows="10">
        <p:column headerText="class">#elem.class.simpleName</p:column>
        <p:column headerText="code">#elem.code</p:column>
        <p:column headerText="description">#elem.description</p:column>
        <p:column headerText="action">
            <p:commandButton action="test2" icon="ui-icon ui-icon-wrench" value="edit">
                <f:setPropertyActionListener target="#testBean.selection" value="#elem"/>
            </p:commandButton>
        </p:column>
    </p:dataTable>

    <p:commandButton action="test2" icon="ui-icon ui-icon-wrench"/>

</h:form>

DataTable 内部的CommanButton 就像一个魅力。

有人知道为什么吗?

这是一个错误吗?

我来了

Glassfish 3.1.2 JSF 2.1.11 (Mojarra) PrimeFaces 3.4-SNAPSHOT

【问题讨论】:

【参考方案1】:

发现延迟数据模型在回发请求中必须是相同的实例,即使具有相同值的新实例也无法工作。所以它必须至少由一个@ViewScoped bean 提供。

【讨论】:

这并不完全正确:如果使用@ViewScoped 在会话中找到相同的LazyDataModel 实例会很有帮助,但您也可以使用@RequestScoped。关键是isRowAvailable() 方法在APPLY_REQUEST_VALUES 中求值时必须返回true,并且pageSize 字段的值必须大于零。我通过扩展LazyDataModel 实现了这一点,同时重载了两个方法:isRowAvailable(),这里我调用load(...) 并将结果应用到setWrappedData() 和第二种方法setRowIndex(int rowIndex),我将pageSize 设置为我的默认值跨度> 【参考方案2】:

自发布此问题以来已过去四年,但问题仍然存在于 PrimeFaces 6.0 中。

我将向那些不想(或不能)使用 ViewScoped bean 的人发布解决方法。

前提是:“您不能将任何“ajaxified”项放在绑定到 RequestScoped 东西的惰性数据表中”。绝不。请记住,任何引发 ajax 调用的东西都不会起作用。

所以第一步是在数据表之外进行 ajax 调用。我们将使用 RemoteCommand 执行此操作。您可以将此 RemoteCommand 放置在 DataTable 之外的任何位置(当然是在表单内)

<p:remoteCommand name="remoteCall" action="#bean.doStuff()">
</p:remoteCommand>

现在,我们要做的就是从 DataTable 中调用这个 RemoteCommand。我正在使用一个链接来执行 javascript 调用,但你可以使用一个按钮或任何你喜欢的东西:

<p:column>
    <p:link value="#item.id" href="#" onclick="remoteCall([name:'id', value:#item.id])">
    </p:link>
</p:column>

此链接提供了一种调用 javascript 函数“remoteCall”的方法,该函数将执行对“bean.doStuff()”的 ajax 调用。

请注意,onClick 事件不仅包含对“remoteCall”的 javascript 调用,还包含一个只有一个参数的参数数组,名为“id”,值为“#item.id”。这将允许 RemoteCommand 将名为“id”的参数发送到支持 bean。

在“doStuff”方法中,您必须检索“id”参数值:

public void doStuff () 

    String id = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id");


【讨论】:

primefaces 实时滚动是不是与延迟加载兼容

】primefaces实时滚动是不是与延迟加载兼容【英文标题】:IsprimefaceslivescrollingcompatiblewithLazyloadingprimefaces实时滚动是否与延迟加载兼容【发布时间】:2014-04-0708:20:42【问题描述】:我有一个需要显示大量数据集的数据表。所以我... 查看详情

延迟加载和解析 PrimeFaces JavaScript 文件

】延迟加载和解析PrimeFacesJavaScript文件【英文标题】:DeferloadingandparsingofPrimeFacesJavaScriptfiles【发布时间】:2014-06-0402:46:07【问题描述】:在使用GooglePageSpeed分析JSF2.1+PrimeFaces4.0webapp的性能时,它建议延迟解析JavaScript文件。在带有... 查看详情

当方法执行更新时刷新延迟加载的 Primefaces 数据表

】当方法执行更新时刷新延迟加载的Primefaces数据表【英文标题】:refreshlazyloadedPrimefacesdatatablewhenamethodperformsanupdate【发布时间】:2015-01-3005:16:42【问题描述】:当我通过JDBC方法更新数据库中的数据时,它会被持久化,但primefaces... 查看详情

PrimeFaces 从延迟加载数据表中导出数据

】PrimeFaces从延迟加载数据表中导出数据【英文标题】:PrimeFacesExportdatafromaLazyloadingDataTable【发布时间】:2013-06-1709:23:25【问题描述】:我想在报告生成期间导出具有LazyLoadDataModel的数据表(带分页)。问题:当我导出时,报告从... 查看详情

将 primefaces 数据表与 org.primefaces.component.datatable.DataTable 绑定;

】将primefaces数据表与org.primefaces.component.datatable.DataTable绑定;【英文标题】:BindingprimefacesdataTablewithorg.primefaces.component.datatable.DataTable;【发布时间】:2012-04-0802:09:28【问题描述】:我有一个关于primefaces数据表组件的问题。我想... 查看详情

如何在 JSF 上延迟 Primefaces AjaxStatus?

】如何在JSF上延迟PrimefacesAjaxStatus?【英文标题】:HowtodelayPrimefacesAjaxStatusonJSF?【发布时间】:2016-10-1311:17:18【问题描述】:如何在Primefaces的AjaxStatus显示时添加延迟(例如300毫秒)。现在,当有一个Ajax请求挂起时,它总是立即... 查看详情

Primefaces dataTable过滤日期

】PrimefacesdataTable过滤日期【英文标题】:PrimefacesdataTablefilteringwithdate【发布时间】:2013-12-0413:56:51【问题描述】:我遇到了一个特殊的问题。我有一个数据表,我想在其中过滤primefaces中的日期。当我使用<p:columnid="date"headerText... 查看详情

Primefaces:从p:dataTable中的行选择中排除列

】Primefaces:从p:dataTable中的行选择中排除列【英文标题】:Primefaces:Excludecolumnfromrowselectioninp:dataTable【发布时间】:2013-01-3012:18:12【问题描述】:p:dataTable有问题,从单行选择中排除一列。我的数据表中有4列。需要前3个来显示f... 查看详情

Primefaces 数据表重置分页

】Primefaces数据表重置分页【英文标题】:Primefacesdatatableresetpagination【发布时间】:2013-08-2819:23:48【问题描述】:我在搜索实用程序中使用带有分页器的dataTable组件,它运行良好,但在将分页器页面重置为第一页时出现问题。例... 查看详情

PrimeFaces Datatable 不显示任何样式

】PrimeFacesDatatable不显示任何样式【英文标题】:PrimeFacesDatatabledoesnotshowanystyle【发布时间】:2014-05-0619:37:14【问题描述】:这是我的“数据表”。“角色”和“活动”是我的标题,“管理员”和“+”是内容(一行)。这个数据... 查看详情

PrimeFaces DataTable 中的 filterMatchMode 是如何工作的?

】PrimeFacesDataTable中的filterMatchMode是如何工作的?【英文标题】:HowitworksthefilterMatchModefromPrimeFacesDataTable?【发布时间】:2011-10-0323:02:08【问题描述】:PrimefacesDatatable允许您使用属性filterMatchMode配置用于列的过滤类型。不过,如果... 查看详情

如何在 PrimeFaces 3.0 的 p:dataTable 中设置 p:column 的宽度?

】如何在PrimeFaces3.0的p:dataTable中设置p:column的宽度?【英文标题】:Howtosetwidthofap:columninap:dataTableinPrimeFaces3.0?【发布时间】:2011-11-1801:14:03【问题描述】:我正在使用PrimeFaces3.0-M3,我有一个&lt;p:dataTable&gt;,其中包含两列。... 查看详情

为 Datatable primefaces 设置列宽

】为Datatableprimefaces设置列宽【英文标题】:settingColumnwidthforDatatableprimefaces【发布时间】:2012-06-2319:22:21【问题描述】:在设置数据表的列宽时需要一些帮助。但是,数据表的宽度似乎并不统一。数据表中列的宽度,似乎因列标... 查看详情

使用jsf(primefaces)将数据从excel复制并粘贴到datatable

我想使用JSF(Primefaces)将数据从Excel复制并粘贴到Datatable。请建议我实现复制和粘贴的可能性。答案您可以侦听dataTableprimefaces对象的粘贴事件并从事件对象获取剪贴板数据,将数据格式化为JSONobject(在我使用JSONArray的示例中)... 查看详情

使用commandButton Primefaces 3.4从dataTable内部提交表单时selectOneMenu null

】使用commandButtonPrimefaces3.4从dataTable内部提交表单时selectOneMenunull【英文标题】:selectOneMenunullwhensubmitformfrominsidedataTablewithcommandButtonPrimefaces3.4【发布时间】:2012-09-2521:28:16【问题描述】:我在dataTable的页脚中有selectOneMenu,我正... 查看详情

PrimeFaces 3.0 - <p:dataTable> 标题不与使用 scrollable="true" 对齐

】PrimeFaces3.0-<p:dataTable>标题不与使用scrollable="true"对齐【英文标题】:PrimeFaces3.0-<p:dataTable>headersdonotlineupwithusingscrollable="true"【发布时间】:2011-09-2602:10:42【问题描述】:我有一个使用PrimeFaces3.0组件的JSF 查看详情

Primefaces DataTable 的特定于列的上下文菜单

】PrimefacesDataTable的特定于列的上下文菜单【英文标题】:Column-specificcontextmenuforPrimefacesDataTable【发布时间】:2013-01-1602:22:03【问题描述】:如何在Primefaces数据表中为每一列定义不同的上下文菜单?将&lt;p:contextMenu&gt;放入&a... 查看详情

数据表延迟加载不起作用

】数据表延迟加载不起作用【英文标题】:DatatableLazyloadingnotworking【发布时间】:2019-01-1507:37:42【问题描述】:我一直在尝试使用数据表的延迟加载功能,但是它一次加载所有数据,我无法弄清楚,出了什么问题。vardataTable=dataT... 查看详情