IResourceHandler - İndirilecek olan kaynağı akım olarak gönderir
Bu arayüzü gerçekleştiren sınıf ResourceStreamRequestHandler sınıfı. Bu sınıf IResourceStream kaynağını okur ve servlet'in çıktısı olarak gönderir.
ResourceStreamRequestHandler Kullanımı Bu arayüzü gerçekleştiren sınıf ResourceStreamRequestHandler sınıfı. Bu sınıf IResourceStream kaynağını okur ve servlet'in çıktısı olarak gönderir.
//ResourceStreamRequestHandler aşağıdakine benzer bir iş yaparEğer indirilen dosya browser içinde gösterilsin istiyorsa aşağıdaki gibi yapabiliriz.
ServletOutputStream servletOutputStreamObj = response.getOutputStream();
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment; filename=\"" + strFileName + ".xls\"");
response.setHeader("Content-Disposition","inline");
ResourceStreamRequestHandler sınıfıBir komponent'in onClick() metoduna aşağıdaki gibi bir kod yazılabilir.
ResourceStreamRequestHandler mergedFileHandler = new ResourceStreamRequestHandler(new FileResourceStream(mergedFiles));Bu tür detaylarla uğraşmak yerine bunları bizim için yapan ResourceLink veya DownloadLink yöntemlerinden birisi kullanılabilir.
mergedFileHandler.setFileName(mergedFiles.getName());
getRequestCycle().scheduleRequestHandlerAfterCurrent(mergedFileHandler);
ResourceLink - Sabit veya Dinamik Kaynakların Alınabilmesi
ResouceStreamResource sınıfı IResource kaynağının dinamik olarak alınabilmesine imkan sağlar.
ResourceLink (new ResourceStreamResource(new AbstractResourceStreamWriter()));
DownloadLink - Sabit Kaynakların Alınabilmesi
Eğer bir dosya indirilecekse DownloadLink kullanılabilir. Örnek:
add(new DownloadLink("download", new AbstractReadOnlyModel<File>() {Bu örnekte DownloadLink kendi içinde IResourceStream sınıfından türeyen FileResourceStream sınıfını kullanıyor.
@Override
public File getObject() {
File tempFile;
try {
tempFile = //Create file;
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
return tempFile;
}
}).setDeleteAfterDownload(true);
Link
Bir Link sınıfının onClick metodunda
getRequestCycle().scheduleRequestHandlerAfterCurrent(handler);
kodu çalıştırılarak indirme işlemi başlatılabilir.
IResourceStream (İndirilecek kaynağı akım haline getirir)
Wicket ile dosya indirmek için aşağıdaki sınıf yapısı temel alınabilir.
Aşağıda ise kendi ResourceStreamWriter sınıfımızı yazmak istersek kullanabileceğimiz hiyerarşi bulunuyor.
IResource
Wicket ByteArrayResource only downloadable: can I let the browser handle the MIME type?
başlıklı soruda IResource'tan türeyen ByteArrayResource ile ilgili bir soru var.İlgili hiyerarşi aşağıda.
Eğer Resource dinamik olarak üretilen bir kaynaksa ResourceStreamResource sınıfı kullanılır.
IRequestCycle
IRequestCycle arayüzünü gerçekleştiren sınıf RequestCyle sınıfı. Bu sınıfın setResponsePage metodunun iki farklı çeşidi var. İlki bir Class alıyor, diğeri ise bir IRequestablePage instance'ı alıyor. Aralarındaki fark burada açıklanıyor. İlk metod 302 tarayıcıya redirect komutu gönderiyor.
RequestCycle in Wicket 1.5 sayfasında açıklandığı gibi dosya indirme işleminin gerçekleşmesini sağlayan RequestCycle sınıfı. Bu sınıf ile gösterilecek bir sonraki sayfayı veya gösterme işlemi bittikten sonra indirilecek dosyayı belirtiyoruz. Örneğin gösterilecek bir sonraki sayfa için
setResponsePage(getApplication().getHomePage());veya
add(new Link<Void>("link-login") {metodunu çalıştırsak bile aslında altta aşağıdaki kod çalışır.
@Override
public void onClick() {
setResponsePage(LoginPage.class);
}
});
How to server-side forward a page request with Wicket 6 sorusunda ise konuyla ilgili açıklama var.
Bookmarkable vs non-bookmarkable pages
Page navigation within the controller başlıklı yazıda anlatıldığı gibi eğer bookmarkable bir sayfa göstermek istersek aşağıdaki gibi yaparız.
Eğer non-bookmarkable bir sayfa göstermek istersek aşağıdaki gibi yaparız.
Hiç yorum yok:
Yorum Gönder