jsf - t :inputFileUpload not uploading the file

标签 jsf file-upload richfaces myfaces tomahawk

我正在使用 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/

相关文章:

java - JSF 中的 SerializedException

java - JSF2 : Handling RMI Connection from WebListener to ManagedBeans

php - 将图像上传到服务器文件夹时出现问题

javascript - 在 extjs3.4 中使用 FileUploadField 扩展

css - JSF,CSS - 动态降低亮度

java - Intellij 13 JSF 对 Spring Beans 的支持

Spring 与 JSF 2 的比较

java - jsp文件上传问题

javascript - 使用 RichFaces 4 从 JavaScript 获取 DOM 元素

java - 无法从复合组件中找到匹配的导航案例