У меня проблема с загрузкой с помощью виджета загрузки простых лиц. После некоторого расследования я заметил, что он отправляет неправильный тип записи "url-data-закодированный" в отличие от запроса multi-patrt. Несмотря на то, что моя форма четко заявляет об этом:
p:dialog name= "upload" id="mapping" header="Upload Mapping File" widgetVar="mappingFileDialog" fixedCenter="true">
<h:form prependId="true" id="uploadMapping" enctype="multipart/form-data">
<p:fileUpload value="#{panaceaController.file}" mode="simple"/>
<p:commandButton id="uploadbuttom" value="Submit" ajax="true"
action="#{panaceaController.handleFileUpload}"/>
</h:form>
</p:dialog>
Что происходит, так это то, что поле файла в контроллере равно нулю.
Другая вещь, которую я предполагаю, связана с тем, что у меня есть несколько форм на этой странице, я думаю, что простые лица отправляют неправильную форму.
Кстати, если я отключу ajax для формы загрузки, enctype запроса верен, но он больше не вызывает действие?!
Это моя HTML-форма:
<h:form prependId="false">
<p:dataTable id="instances" lazy="false" paginator="false" var="instance"
value="#{panaceaController.instances}">
<p:column>
<f:facet name="header">
<h:outputText value="Name"/>
</f:facet>
<h:outputText value="#{instance.name}"/>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Directory"/>
</f:facet>
<h:outputText value="#{instance.directory}"/>
</p:column>
<p:column>
<f:facet name="header">
Options
</f:facet>
<p:commandLink async="true" update="propertiesTable" oncomplete="propertiesDialog.show();">
<h:graphicImage value="img/properties.png" />
<f:setPropertyActionListener value="#{instance}" target="#{panaceaController.instance}"/>
</p:commandLink>
<p:commandLink async="true" onclick="confirmDelete.show();" >
<h:graphicImage value="img/edit-delete.png"/>
<f:setPropertyActionListener value="#{instance}" target="#{panaceaController.instance}"/>
</p:commandLink>
<p:commandLink async="true" onclick="mappingFileDialog.show();" >
<h:graphicImage value="img/mapping.png"/>
<f:setPropertyActionListener value="#{instance}" target="#{panaceaController.instance}"/>
</p:commandLink>
</p:column>
</p:dataTable>
</h:form>
<p:dialog id="properties" header="Properties" widgetVar="propertiesDialog" fixedCenter="true">
<h:panelGroup id="propertiesTable" >
<p>
Properties for #{panaceaController.instance.directory} :
</p>
<h:form>
<p:dataTable id="propertyTable" var="propertyInstance" value="#{panaceaController.instance.properties}" paginator="false">
<p:column>
<h:outputText value="#{propertyInstance.name}"/>
</p:column>
<p:column>
<h:inputText value = "#{propertyInstance.value}" required="true"/>
</p:column>
</p:dataTable>
<h:commandButton action="#{panaceaController.saveProperties}" value="Save"/>
</h:form>
</h:panelGroup>
</p:dialog>
<h:form>
<p:confirmDialog widgetVar="confirmDelete" message="Are you sure you want to delete this Panacea instance?"
severity="warn">
<p:commandButton value="Yes" update="instances" oncomplete="confirmDelete.hide()"
actionListener="#{panaceaController.delete}" />
<p:commandButton value="Not" onclick="confirmDelete.hide()" type="button" />
</p:confirmDialog>
</h:form>
<p:dialog name= "upload" id="mapping" header="Upload Mapping File" widgetVar="mappingFileDialog" fixedCenter="true">
<h:form prependId="true" id="uploadMapping" enctype="multipart/form-data">
<p:fileUpload value="#{panaceaController.file}" mode="simple"/>
<p:commandButton id="uploadbuttom" value="Submit" ajax="false" async="false"
action="#{panaceaController.handleFileUpload}"/>
</h:form>
</p:dialog>