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