使用 Wicket 1.5,我需要在新窗口中显示 PDF 文件。为此,我扩展了 ByteArrayResource。问题是内容处理只有两个选项:附件和内联。
第一个下载文件,当我的用户只想查阅文件时,这样做太长了。第二个在同一个窗口中打开文件,用户希望一个新窗口继续处理打开的文档。
这是我的 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" />
有什么建议吗?
精度:我真的需要一个新的单独窗口,而不是一个新标签。