Wicket 1.5 では、PDF ファイルを新しいウィンドウで表示する必要があります。そのために、ByteArrayResource を拡張します。問題は、コンテンツの配置には、添付とインラインの 2 つのオプションしかないことです。
最初のものはファイルをダウンロードしますが、ファイルを参照したいだけの場合、ユーザーがそれを行うには長すぎます。2 つ目は同じウィンドウでファイルを開きます。ユーザーは、ドキュメントを開いたまま新しいウィンドウで作業を続けたいと考えています。
ここに私のByteArrayResourceコードがあります:
public class FileArchiveRessource extends ByteArrayResource {
private final String genericName;
private final Locale locale;
public FileArchiveRessource(String genericName, Locale locale) {
super("application/pdf");
this.genericName = genericName;
this.locale = locale;
this.contentType = "application/pdf";
}
@Override
protected byte[] getData(IResource.Attributes attributes) {
try {
String name = genericName.replaceAll("[{][$][}]", locale.getLanguage().toUpperCase());
return IOUtils.toByteArray(this.getClass().getResourceAsStream(name));
} catch (IOException ex) {
return new byte[0];
}
}
@Override
protected void configureResponse(ResourceResponse response, Attributes attributes) {
super.configureResponse(response, attributes);
response.setContentDisposition(ContentDisposition.INLINE);
}
}
この実装では、名前の {$} がユーザーの言語に置き換えられます。
リソースのインスタンス化方法:
final Locale locale = getLocale();
final String name = "document-{$}.pdf".replaceAll("[{][$][}]", locale.getLanguage().toUpperCase());
ResourceLink button = new ResourceLink("list.openbutton", new ResourceReference(name) {
@Override
public IResource getResource() {
return new FileArchiveRessource(name, locale);
}
});
add(button);
そして、これが私のリソースの開くボタンの例です:
<input wicket:id="list.openbutton"
type="submit"
class="button openbutton"
value="Open" title="Open resource" />
なにか提案を?
精度: 新しいタブではなく、新しい別のウィンドウが本当に必要です。