Можно ли загрузить файл, используя
AjaxLink<Void> downloadButton = new AjaxLink<Void>("downloadButton") {
@Override
public void onClick(AjaxRequestTarget ajaxRequestTarget) {
}
? Или это может произойти только с onSubmit()
действием? Потому что у меня есть рабочий код загрузки файла нажатием кнопки, но этот метод использует onSubmit
. Теперь я пытаюсь сделать то же действие с такой кнопкой, она подготавливает файл таким же образом, даже создает временный файл в моих локальных файлах, но когда дело доходит до всплывающего окна в браузере, он просто ничего не делает,В чем может быть проблема?
Редактировать:
Вот рабочий код, но если я использую тот же код в моем AjaxLink, он не будет работать должным образом, как указано ранее:
@Override
protected void onSubmit() {
super.onSubmit();
File file = null;
try {
file = File.createTempFile("temp-file-name", ".csv");
String data = getData();
if (data == null) {
FileUtils.writeByteArrayToFile(file, ("").getBytes());
} else {
FileUtils.writeByteArrayToFile(file, data.getBytes());
}
} catch (IOException e) {
e.printStackTrace();
}
if (file == null) {
throw new IllegalStateException(getClass().getName() +
" failed to retrieve a File object from model");
}
final File preparedFile = file;
IResourceStream resourceStream = new FileResourceStream(
new org.apache.wicket.util.file.File(file));
getRequestCycle().scheduleRequestHandlerAfterCurrent(
new ResourceStreamRequestHandler(resourceStream) {
@Override
public void respond(IRequestCycle requestCycle) {
super.respond(requestCycle);
Files.remove(preparedFile);
}
}.setFileName("Report.csv")
.setContentDisposition(ContentDisposition.ATTACHMENT));
}
}
}