Я создал простую jsf заявку для загрузки файла, но вместо создания jsf входного файла, подобного этому
jsf
<h:form id="fileToUploadForm" enctype="multipart/form-data"> <h:inputFile id="fileToUpload" required="true" f5:multiple="multiple" requiredMessage="No file selected ..." onchange="fileSelected();" render="FilesTable"/> <h:commandButton type="button" onclick="uploadFile()" value="Upload" /> </h:form>
Я хочу создать его программно и добавить в форму.Например: htmlform.getChildren().add(<File Component>)
htmlform.getChildren().add(<File Component>)
Поскольку я ранее использовал jsf 2.1, я не нашел этот класс,
javax.faces.component.html.HtmlInputFile
- это класс, присутствующий в jsf API 2.2 и выше, а
org.omnifaces.component.input.InputFile
- это класс Iвстречается в омнифе как альтернатива.
Документация Primefaces предлагает использовать компонент FileUpload:
p:fileUpload
multiple="true"
sizeLimit
fileLimit
allowTypes
dragDropSupport
XHTML-файл:
<h:form> <p:fileUpload fileUploadListener="#{fileUploadView.handleFileUpload}" mode="advanced" dragDropSupport="false" multiple="true" update="messages" fileLimit="3" sizeLimit="100000 allowTypes="/(\.|\/)(gif|jpe?g|png)$/" /> <p:growl id="messages" showDetail="true" /> </h:form>
ManagedBean:
@ManagedBean public class FileUploadView { private UploadedFile file; public UploadedFile getFile() { return file; } public void setFile(UploadedFile file) { this.file = file; } public void upload() { if(file != null) { FacesMessage message = new FacesMessage("Succesful", file.getFileName() + " is uploaded."); FacesContext.getCurrentInstance().addMessage(null, message); } } public void handleFileUpload(FileUploadEvent event) { FacesMessage msg = new FacesMessage("Succesful", event.getFile().getFileName() + " is uploaded."); FacesContext.getCurrentInstance().addMessage(null, msg); } }