找不到JSF文件上传方法

时间:2017-04-24 12:06:19

标签: java jsf

我正在尝试实现单个文件上传。这是我的代码:

<h:form id="form" enctype="multipart/form-data" >
                <div class="col-sm-4">
                    <div class="panel panel-default">
                        <div class="panel-heading">
                            <h4 class="mainHeader">Settings</h4>
                        </div>
                        <div class="panel-body">
                            <div class="form-group">
                                <div class="row">
                                    <div class="col-md-12">
                                        <h:outputLabel value="Upload FIle"></h:outputLabel>
                                    </div>
                                </div>
                                <div class="row">
                                    <div class="col-md-12">
                                        <span class="btn btn-success fileinput-button"> 
                                        <h:inputFile value="#{fileBean.file}" >
                                                <i class="fa fa-fw fa-plus"></i>
                                                <f:ajax execute="@all" render="@form" listener="#{fileBean.parseDoc}"/>
                                                <span>Upload</span>
                                        </h:inputFile>
                                        </span>
                                    </div>
                                </div>
                                <div class="row">
                                    <div class="col-md-12">
                                    <h:commandButton actionListener="#{fileBean.parseDoc}"></h:commandButton>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
                </h:form>

这是豆子:

import java.io.InputStream;

import javax.servlet.http.Part;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean
@SessionScoped
public class FileBean {
    private Part file;



    public void parseDoc(){
        Ivy.log().debug("Size is: "+file.getSize());
    }


    public Part getFile() {
        return file;
    }

    public void setFile(Part file) {
        this.file = file;
    }
}

每次调用方法parseDoc时都会抛出此错误:

MethodNotFoundException: Method not found: FileBean@8cace1c.parseDoc(javax.faces.event.AjaxBehaviorEvent)

我真的不知道这里的问题是什么,因为这个方法的命名似乎没问题。

1 个答案:

答案 0 :(得分:1)

在错误中,您可以看到JSF正在寻找具有签名的方法:parseDoc(javax.faces.event.AjaxBehaviorEvent)。您的方法不接受参数,因此无效。只需在javax.faces.event.AjaxBehaviorEvent方法中添加parseDoc()类型的参数即可。