PrimeFaces UploadedFile afax来自模态对话框的sizelimit

时间:2016-12-11 09:14:53

标签: ajax jsf primefaces

我要求从模态对话框中获取上传文件。因此,我设法使用primeFaces #include <stdio.h> #include <stdlib.h> struct node{ int value; struct node* right; struct node* left; }; struct node* insert(struct node* n,int age){ if (n==NULL){ n = malloc(sizeof(struct node)); n->value = age; n->left = n->right = NULL; } else if(age < n->value){ n->left = insert(n->left, age); } else { n->right = insert(n->right, age); } return n; } void print_tree(struct node *n) { if (n != NULL) { print_tree(n->left); printf("%d\n", n->value); print_tree(n->right); } } int main(){ int age; struct node* n = NULL; printf("Enter some numbers(1 to stop): "); while (scanf("%d", &age) == 1 && age != 1) { n = insert(n, age); } printf("\nYour numbers inserted into BST:\n"); print_tree(n); return 0; } 组件,使用简单的非ajax模式:

fileUpload

从bean调用<p:dialog id="dlg" widgetVar="dlg" modal="true" appendTo="@(body)" header="#{messages['pages.dlg']}" closeOnEscape="true"> <h:form id="dlgForm" enctype="multipart/form-data"> <!-- Some business data --> <p:fileUpload value="#{bean.uploadedFile}" mode="simple"/> <p:commandButton id="saveBtn" action="#{bean.save}" update="messages" ajax="false" partialSubmit="dlgForm"/> </h:form> </p:dialog> 方法时,我有运行业务逻辑的服务方法。现在我得到了新的要求:将文件大小限制为5 MB。但是当我尝试在save组件上使用sizeLimit属性时 - 我什么也没发生。原因是验证在客户端,但禁用fileUpload则无法验证。

我尝试采用ajax模式,但遇到了一些问题:

  1. bean上的advanceduploadedFile - 因此我无法在调用requestScoped按钮时获取数据。我只能在save中保存它 - 但问题就出现了:我需要另一个业务数据作为该流程的一部分进行保存。上传的文件是用户提供的信息的一部分。我不能在没有这些数据的情况下调用保存文件。
  2. 当按下fileUploadListener时,文件上传时带有预览(如果是图像文件) - 在上传文件后,预览将无法消除。如何告诉他在upload组件中保持advanced模式的底部字段?只有在按下fileUpload按钮时才能保存在服务器端?
  3. 所以问题是:如何在这样的对话框中使用save组件类型?我正在运行PrimeFaces 6.0,JSF 2.2(mojara)。

1 个答案:

答案 0 :(得分:0)

我得到了解决方案而且非常简单。我只需要将上传的文件保存在bean的私有字段中:

PreparedStatement ps = con.prepareStatement("select * from Application where name like '"+ name+"%'");

然后我可以让@ManagedBean @ViewScoped public class Bean { @EJB private SomeService service; private BusinessObjectDTO objectDTO; // DTO with business data from dialog form private byte[] fileData; private String fileName; public void handleFileUpload(FileUploadEvent event) { UploadedFile uploadedFile = event.getFile(); fileData = JSFHelper.getFileData(uploadedFile); fileName = uploadedFile.getFileName(); } // Invoked when save is called from dialog public void save() { service.save(objectDTO, fileData, fileName); // add info message } } 使用在另一个组件中显示上传的文件预览。