繰り返しますが、改札に問題がありました。別のページ「クラス A」に実装されているクラス「FileUploadPanel」でデータをアップロードしようとしています。
クラスA
...
/* uploadfields for Picture and Video */
ArrayList<String> picExt = new ArrayList<String>();
ArrayList<String> videoExt = new ArrayList<String>();
picExt.add("jpg");
videoExt.add("mp4");
final FileUploadPanel picUpload = new FileUploadPanel("picUpload", "C:\\", picExt);
final FileUploadPanel videoUpload = new FileUploadPanel("videoUpload", "C:\\", videoExt);
final Form form = new Form("form"){
protected void onSubmit() {
...
// Save the path of Video and Picture into Database
table.setVideo(videoUpload.getFilepath());
table.setPicture(picUpload.getFilepath());
...
}
...
クラス FileUploadPanel
public class FileUploadPanel extends Panel {
private static final long serialVersionUID = -2059476447949908649L;
private FileUploadField fileUpload;
private String UPLOAD_FOLDER = "C:\\";
private String filepath = "";
private List<String> fileExtensions;
/**
* Constructor of this Class
* @param id the wicket-id
* @param uploadFolder the folder, in which the File will be uploaded
* @param fileExtensions List of Strings
*/
public FileUploadPanel(String id, String uploadFolder, List<String> fileExtensions) {
super(id);
this.UPLOAD_FOLDER = uploadFolder;
this.fileExtensions = fileExtensions;
add(fileUpload = new FileUploadField("fileUpload"));
}
@Override
public void onComponentTag(ComponentTag tag){
// If no file is selected on startup
if(fileUpload.getFileUpload() == null){
return;
}
final FileUpload uploadedFile = fileUpload.getFileUpload();
if (uploadedFile != null) {
// write to a new file,
File newFile = new File(UPLOAD_FOLDER
+ uploadedFile.getClientFileName());
filepath = UPLOAD_FOLDER + uploadedFile.getClientFileName();
// if file in upload-folder already exists -> delete it
if (newFile.exists()) {
newFile.delete();
}
try {
newFile.createNewFile();
uploadedFile.writeTo(newFile);
info("saved file: " + uploadedFile.getClientFileName());
} catch (Exception e) {
throw new IllegalStateException("Error");
}
}
}
public String getFilepath() {
return filepath;
}
}
「クラス A」で送信ボタンを使用すると、Pic とビデオが C:\ に保存されます。ようやくウィケットと仲良くなったと思ったのに、応援が早すぎて…
問題: 正しいパスがデータベースに保存されず、「クラス A」の形式で処理されます。送信ボタンを使用するときに FileUploadPanel の onComponentTag(...) を実行する必要があるため、実際には取得できません。これは、onComponentTag(...) で「画像は JPG でなければならない、または保存されない」などの検証をいくつか追加したためです。確かに、フォームの送信ボタンが使用されると onComponentTag(...) が実行されます。これは、ファイルパスが最新である必要があることも意味します。
今回は何が間違っているのですか?
少し早いですがお礼を!
あいさつ V1nc3nt