我正在尝试实现单个文件上传。这是我的代码:
<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)
我真的不知道这里的问题是什么,因为这个方法的命名似乎没问题。
答案 0 :(得分:1)
在错误中,您可以看到JSF正在寻找具有签名的方法:parseDoc(javax.faces.event.AjaxBehaviorEvent)
。您的方法不接受参数,因此无效。只需在javax.faces.event.AjaxBehaviorEvent
方法中添加parseDoc()
类型的参数即可。