我正在WebSphere Portal 8.0.0.3上使用java6,JSF2.0构建测试应用程序以实现文件上载功能。
FileUploadView.xhtml
<h:form enctype="multipart/form-data">
<input type="file" name="fileItem1" />
<h:commandButton value="submit" action="#{bean.submit}" />
</h:form>
FileUploadPortlet.java
class FileUploadPortlet extends com.ibm.faces20.portlet.FaceletPortlet{
public void processAction(ActionRequest request, ActionResponse response) throws PortletException, java.io.IOException {
boolean isMultipart = PortletFileUpload.isMultipartContent(request);
try {
if (isMultipart) {
FileItemFactory factory = new DiskFileItemFactory();
PortletFileUpload upload = new PortletFileUpload(factory);
List /* FileItem */ items = upload.parseRequest(request);
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
String name = item.getFieldName();
String value = item.getString();
} else {
String fileName = item.getName();
long sizeInBytes = item.getSize();
System.out.println("FileName is: "+fileName+" Size is: "+sizeInBytes);
}
}
}
} catch ( Exception e) {
System.out.println("SampleFileUploadPortlet.processAction() Error occured");
e.printStackTrace();
}
}
}
portlet.xml中
<portlet>
<portlet-name>FileUploadView</portlet-name>
<portlet-class>com.code.FileUploadPortlet</portlet.class>
........
</portlet>
FileIploadManagedBean.java
@ManagedBean(name = "bean")
@SessionScoped
public class FileIploadManagedBean{
public void submit(){
System.out.println("Hello i am in managed bean!!");
}
}
当我尝试提交表单时,我可以在FileUploadPortlet.java的processAction方法中获取该文件。但是我的托管bean的提交方法没有被调用。
但是当我从表单中删除enctype="multipart/form-data"
时。在此processAction方法中,在FileUploadPortlet的processAction方法和文件不可见之前调用托管bean的Submit方法。