Я использую Primefaces 5.1 с JSF 2.2.6.invoke confirmDialog в bean-компоненте
Мне нужно определить, существует ли какой-либо файл в папке, когда пользователь загружает файлы (файлы).
У меня есть класс, который использует PrimeFaces, который загружает файлы пользователя в определенную папку, но если пользователь пытается загрузить файл с тем же именем, что и тот, который уже присутствует, мне нужно оповещение и отмена обработчика.
Любая идея?
код в XHTML является:
<h:form enctype="multipart/form-data" id="addFileDialog">
<p:fileUpload fileUploadListener="#{attachmentsComponent.handleFileUpload}"
mode="advanced" multiple="true" dragDropSupport="true"
label="#{text['tasksbacking.addFile.choose']}" uploadLabel="#{text['tasksbacking.addFile.upload']}" cancelLabel="#{text['tasksbacking.addFile.cancel']}"
allowTypes="/(\.|\/)(gif|jpe?g|png|pdf|doc|docx|txt|xml)$/" invalidFileMessage="#{text['tasksbacking.addFile.invalidFile']}"
fileLimit="4" fileLimitMessage="#{text['tasksbacking.addFile.invalidCount']}"
oncomplete="PF('addfile').hide();"/>
</h:form>
код в бобе:
public void handleFileUpload(FileUploadEvent event) {
// vars
String originalName = event.getFile().getFileName();
if (log.isDebugEnabled()) {
log.debug("create file: " + originalName);
}
User loggedInUser = getSessionUser();
// define parent folder
Folder folder = null;
// versionamento
FileDetail fileDTSVersion = null;
// verifica se ficheiro já existe na folder
if (this.selectedNodeAttach != null) {
if (this.selectedNodeAttach.getData() instanceof Attachment) {
folder = (Folder) (this.selectedNodeAttach.getParent().getData());
} else {
folder = (Folder) (this.selectedNodeAttach.getData());
}
for (TreeNode tree : this.selectedNodeAttach.getChildren()) {
if (tree.getType().equals("file")) {
Attachment fileChild = this.attachmentManager.initializeAttachment((Attachment) (tree.getData()));
if (fileChild.getName().equals(originalName)) {
if (fileChild.getContentObject() instanceof File) {
//file already exists --- need confirm action ???????????
}
}
}
}
}
// guarda ficheiro localmente
try {
if (log.isDebugEnabled()) {
log.debug("saving file in local..." + internalName);
}
copyFileToDisk(internalName, event.getFile().getInputstream());
} catch (IOException ex) {
log.error(null, ex);
}
}
нормально, но мне нужно ждать ответа в методе handleFileUpload (событие FileUploadEvent), это возможно? – Marin
Не понимаю. Ваш первый вопрос состоял в том, чтобы вызвать диалог с управляемым компонентом. Что вы подразумеваете под «ждать ответа в методе X»? –