我正在使用 myfaces ExtensionFilter 上传文件,但该文件没有设置到我的 bean 以进行进一步处理。
代码如下:
<h:form id="uploadFileForm" enctype="multipart/form-data">
<tom:inputFileUpload id="file"
value="#{paramUpload.uploadFile}">
<f:valueChangeListener type="com.bosch.de.plcd.plugin.ParamFileUpload" />
</tom:inputFileUpload>
<a4j:commandButton value="#{tpMsgs.upload}"
styleClass="button" action="#{paramUpload.uploadParamFile}"
onclick="javascript:updateParentScreen();">
</a4j:commandButton>
</h:form>
web.xml配置如下
<filter>
<filter-name>Extensions Filter</filter-name>
<filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Extensions Filter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
由于 UploadFile
没有设置为 bean,我也尝试使用 ValueChangeListener,但无论如何,它不是 bean :)
bean 代码
public class ParamFileUpload implements ValueChangeListener {
private UploadedFile uploadFile;
public void uploadParamFile() {
if(uploadFile != null) {
LOGGER.info("File type: " + uploadFile.getContentType());
LOGGER.info("File name: " + uploadFile.getName());
LOGGER.info("File size: " + uploadFile.getSize() + " bytes");
}
}
public UploadedFile getUploadFile() {
return uploadFile;
}
public void setUploadFile(UploadedFile uploadFile) {
this.uploadFile = (UploadedFile)uploadFile;
}
public void processValueChange(ValueChangeEvent event)
throws AbortProcessingException {
this.uploadFile = (UploadedFile) event.getNewValue();
}
}
您是否看到我在这里可能遗漏的任何其他配置?
最佳答案
当前的 JSF 和 Tomahawk 版本无法通过 ajax 上传文件。 JSF 创建的 Ajax 请求不支持也不使用 multipart/form-data
. Tomahawk 不是基于 ajax 的组件库。请改用普通的命令按钮。
<h:commandButton value="#{tpMsgs.upload}"
styleClass="button" action="#{paramUpload.uploadParamFile}"
onclick="javascript:updateParentScreen();">
</h:commandButton>
支持使用ajax上传文件是scheduled对于即将推出的 JSF 2.2 和新的 <h:inputFile>
组件。
或者,您可以使用 RichFaces 自己的 <rich:fileUpload>
.根据使用的 RichFaces 版本,它在幕后使用 Flash 或 iframe hack 来实现异步文件上传。
关于jsf - t :inputFileUpload not uploading the file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10754300/