Primefaces 是否可以重置p:fileUpload上的文件限制计数器?

Primefaces 是否可以重置p:fileUpload上的文件限制计数器?,primefaces,Primefaces,我们有一个p:fileUpload,让用户上传一个化身图像。如果他愿意,他应该能够在不需要重新加载视图的情况下快速连续上传不同的视图;这将取代他目前的化身每一次。但是,如果fileLimit设置为1,他必须重新加载页面才能再次使用该组件。如果更多(或无限(=0)),他可以一次上传多个文件,这没有什么意义。如果设置为false,“多个”-属性仅将文件浏览对话框限制为选择单个文件;它仍然可以再次打开以随意添加更多文件。是否可以允许上载任意数量的文件,但不能同时上载多个文件?我们使用的是Primefa

我们有一个
p:fileUpload
,让用户上传一个化身图像。如果他愿意,他应该能够在不需要重新加载视图的情况下快速连续上传不同的视图;这将取代他目前的化身每一次。但是,如果
fileLimit
设置为1,他必须重新加载页面才能再次使用该组件。如果更多(或无限(=0)),他可以一次上传多个文件,这没有什么意义。如果设置为false,“多个”-属性仅将文件浏览对话框限制为选择单个文件;它仍然可以再次打开以随意添加更多文件。是否可以允许上载任意数量的文件,但不能同时上载多个文件?我们使用的是Primefaces 4.0。

您是否使用了
auto=“true”
语句?请记住,除非用户激活,否则Primefaces中的默认设置不会自动上载文件。

我想出了这个解决方法,它不会重置文件限制计数器本身,而是重置文件上载组件,以便计数器也重置。这样,参数
fileLimit
将限制每次上载的文件数,而不是每次页面加载的文件数

首先,让我们在PrimeFaces文件上载组件中定义一个
reset()
函数:

PrimeFaces.widget.FileUpload.prototype.reset = function() {
    this.clearMessages();
    return this.init(this.cfg);
}
此方法通过使用当前配置调用
init()
重置组件

然后我们只需在FileUploadEvent中调用此方法,如下所示:

public void uploadFile(FileUploadEvent event) {
    RequestContext.getCurrentInstance().execute("PF('fileUploadWidgetVar').reset();");
}

现在,每次处理上传的文件时,计数器都会重置,因为组件也会重置。

我也遇到了同样的问题。将update=“@this”添加到p:fileUpload标记解决了这个问题。

这对于解决方案来说是相当公平的,即使不是解决方案。我想我们可以这样做。在xhtml中,重置函数到底在哪里?它是在脚本块中还是在其他地方?第一段代码应该放在脚本块中,因为它是一个javascript函数。第二个片段是一个关于如何使用ManagedBean中的javascript函数的示例。这是一个非常好的示例,但您不需要包含java代码,您只需从p:fileUpload的oncomplete方法调用reset方法:oncomplete=“PF('fileUploadWidget')。reset()”这应该是公认的答案,选择文件时不需要添加JS函数或强制上载。它从Primefaces 5.3开始工作。这是关键