Jsf p:dataTable中的数据太多导致行/单元格编辑提交中断

Jsf p:dataTable中的数据太多导致行/单元格编辑提交中断,jsf,post,primefaces,datatable,get,Jsf,Post,Primefaces,Datatable,Get,我一直在使用datatables来允许用户输入和编辑大量数据,但发现一旦达到大量(但不确定)的列和行,表单就无法提交,并且在执行页面刷新之前,与服务器的所有通信形式都被切断(不相关的按钮、ajax等) 这是我的计算机/浏览器的限制,还是对数据表中能够显示的最大可编辑数据量有硬编码限制?这可能是因为表单中输入字段的数量有最大限制吗 是为我的数据表使用paginator的唯一解决方案吗 下面是一个示例,如果行/列太多,该示例(对我来说)将无法编辑 好的,我找到了一个 显然,每个输入都作为GET/P

我一直在使用datatables来允许用户输入和编辑大量数据,但发现一旦达到大量(但不确定)的列和行,表单就无法提交,并且在执行页面刷新之前,与服务器的所有通信形式都被切断(不相关的按钮、ajax等)

这是我的计算机/浏览器的限制,还是对数据表中能够显示的最大可编辑数据量有硬编码限制?这可能是因为表单中输入字段的数量有最大限制吗

是为我的数据表使用paginator的唯一解决方案吗

下面是一个示例,如果行/列太多,该示例(对我来说)将无法编辑


好的,我找到了一个

显然,每个输入都作为GET/POST参数发送,服务器上的默认限制为512,以防止DoS攻击

不幸的是,Primefaces似乎没有显示此错误,因此很难找到。
编辑:如果日志记录设置为正确的级别,则显示错误。错误也显示在F12开发人员工具调试日志中

简而言之,您必须转到服务器
standalone.xml
并添加:

  <property name="org.apache.tomcat.util.http.Parameters.MAX_COUNT" value="10000"/>
这样,cfg的第一个参数(即正在编辑的行)的值被用作查找属性
data ri
设置为该值(行)的元素的值

请注意,这确实需要使用primefaces 5.2,但对于较旧的版本,可以通过覆盖整个软件包,并在相同函数的正确位置策略性地放置类似的行(请注意cfg.partialSubmitFilter将不存在)来实现这一点。

好的,我找到了一个

显然,每个输入都作为GET/POST参数发送,服务器上的默认限制为512,以防止DoS攻击

不幸的是,Primefaces似乎没有显示此错误,因此很难找到。
编辑:如果日志记录设置为正确的级别,则显示错误。错误也显示在F12开发人员工具调试日志中

简而言之,您必须转到服务器
standalone.xml
并添加:

  <property name="org.apache.tomcat.util.http.Parameters.MAX_COUNT" value="10000"/>
这样,cfg的第一个参数(即正在编辑的行)的值被用作查找属性
data ri
设置为该值(行)的元素的值


请注意,这确实要求您使用primefaces 5.2,但对于较旧的版本,可以通过覆盖整个软件包,并在相同函数的正确位置放置类似的行(请注意cfg.partialSubmitFilter将不存在)来实现这一点。

使用行或单元格编辑器时,指示
cellEdit
事件使用
partialSubmit=“true”


...
这将只发送
process
属性所包含的输入字段(即行或单元格本身),而不是每个输入字段

另见:

使用行或单元格编辑器时,指示
cellEdit
事件使用
partialSubmit=“true”


...
这将只发送
process
属性所包含的输入字段(即行或单元格本身),而不是每个输入字段

另见:

我找到了更优雅的解决方案,没有覆盖PrimeFaces.ajax.Request.send函数,仍然只在rowEdit事件中发生。 首先,定义javascript函数:

function sendOnlyEditedRow(cfg) {
   cfg.partialSubmitFilter = "[data-ri=" + cfg.ext.params[0].value + "] :input";
}
然后在onstart回调中调用它:

<p:ajax onstart="sendOnlyEditedRow(cfg)" event="rowEdit" listener="#{cc.attrs.detectedFormations.confirmDetectedFormation(i)}"
        process="@this detectedFormations" update="detectedFormations"
        partialSubmit="true" />

我找到了更优雅的解决方案,它没有覆盖PrimeFaces.ajax.Request.send函数,而且仍然只在rowEdit事件中发生。 首先,定义javascript函数:

function sendOnlyEditedRow(cfg) {
   cfg.partialSubmitFilter = "[data-ri=" + cfg.ext.params[0].value + "] :input";
}
然后在onstart回调中调用它:

<p:ajax onstart="sendOnlyEditedRow(cfg)" event="rowEdit" listener="#{cc.attrs.detectedFormations.confirmDetectedFormation(i)}"
        process="@this detectedFormations" update="detectedFormations"
        partialSubmit="true" />


您使用的PrimeFaces版本是什么?浏览器控制台上是否存在JavaScript错误?AJAX请求/响应的状态是什么?如果在显示包含许多列的数据表时需要考虑水平空间,请选择一个水平可滚动的数据表。我使用的是Primefaces 5.0版-水平空间没有任何问题,因为列越来越薄。我的控制台没有显示任何内容。如果在cellEditor中使用本机jsf控件会怎么样?您是否尝试过更新的PF版本,只是为了看看行为是否有所改变/改进?您使用的PrimeFaces版本是什么?浏览器控制台上是否存在JavaScript错误?AJAX请求/响应的状态是什么?如果在显示包含许多列的数据表时需要考虑水平空间,请选择一个水平可滚动的数据表。我使用的是Primefaces 5.0版-水平空间没有任何问题,因为列越来越薄。我的控制台没有显示任何内容。如果在cellEditor中使用本机jsf控件会怎么样?您是否尝试过更新的PF版本,只是为了看看行为是否有所改变/改进?这是一个比我更干净、更方便的解决方案,因为它不仅可以防止更改单个页面的服务器设置,还可以最小化发送的数据,将查询速度提高到恒定时间。不幸的是,我无法让它工作-结果完全一样。我想使用这种方法,但它甚至在我编辑任何内容(即:页面顶部/底部的不相关链接不起作用等)之前就已经收支平衡。这是一种比我的解决方案更干净、更方便的解决方案,因为它不仅可以防止更改单个页面的服务器设置,还可以最大限度地减少发送的数据,将查询加速到固定时间。不幸的是,我无法让它工作-结果完全一样。我想使用这种方法,但在我可以编辑任何内容(例如:pa顶部/底部的不相关链接)之前,它就已经收支平衡了