我和Tapestry一起工作,这对我来说相当新鲜。在我的应用程序中,我使用UploadedFile来获取用户选择的文件,但是当我想获取其文件名时,我得到了NullException。有什么问题?
documentFile声明:
@org.apache.tapestry5.annotations.Property
private UploadedFile documentFile;
保存时执行的方法:
@XHR
Object onSelectedFromSaveDocument() {
String fileName = UploadFileUtils.saveFile(documentFile, DocRoot);
this.curDocument.setType(curFileType.getValue());
this.curDocument.setPath(fileName);
if(this.getDocumentByKeys(this.curDocument.getDescription()) != null) {
this.propertyDocumentDAO.merge(this.curDocument);
} else {
curDocument.setPropertyCode(selectedCode);
this.propertyDocumentDAO.create(this.curDocument);
}
return onActionFromCancelDocument();
}
UploadFileUtils.java:
public class UploadFileUtils {
public static String saveFile(UploadedFile file, String fileDir) {
if(!fileDir.endsWith(File.separator)) {
fileDir = fileDir+File.separator;
}
File dir = new File(fileDir);
if(!dir.exists()) {
dir.mkdirs();
}
String fileExt = file.getFileName();
int dotPos = fileExt.lastIndexOf(".");
if(dotPos >= 0) {
fileExt = fileExt.substring(dotPos+1);
}
File copied = new File(fileDir+DateUtils.getDateTimeString()+"."+fileExt);
file.write(copied);
return copied.getName();
}
}
抛出Null Exception的行是:
String fileName = UploadFileUtils.saveFile(documentFile, DocRoot);
这......
String fileExt = file.getFileName();
更新:
这是我的ViewProperty.tml
<t:if test="creatingDocument">
<input t:type="upload" t:id="file" t:value="documentFile"
validate="required" />
这是我的DocRoot
private final String DocRoot = this.configManager.getString("DocRoot", "/FileUpload/DocRoot/");
CONFIGMANAGER
@InjectService("BosConfigManager")
private BosConfigManager configManager;