使用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" />
有什么建议吗?
精密: 我真的需要一个新的单独窗口,而不是一个新标签。
答案 0 :(得分:3)
为什么你不只是在HTML中使用简单的链接而不是按钮?
<a href="#" target="_blank" wicket:id="list.openbutton">Open resource</a>
答案 1 :(得分:2)
感谢Joachim,我找到了一个完全符合我需求的解决方案。我使用javascript打开一个包含文档的新窗口。
这是javascript:
function openPDF(source, name) {
var screenHeight = screen.height;
var height = screenHeight - 100;
var width = height / (1.3);
var specs = 'directories=0, location=0, toolbar=0, menubar=0, resizable=1, status=0';
specs += ', height=' + height;
specs += ', width=' + width;
specs += ', left=' + (screen.width - width)/2;
specs += ', top=' + 10;
window.open(source, name, specs);
return false;
}
按钮:
<a href="#" target="_blank" wicket:id="list.openbutton"
class="button openbutton" onClick="return openPDF(this.href, 'PDF file')">Open</a>
答案 2 :(得分:1)
尝试将onclick="target='_blank';return true;"
添加到您的输入
答案 3 :(得分:1)
我认为最好的解决方案是使用这个: 这将打开一个带有弹出配置的新窗口。
PopupSettings popupSettings = new PopupSettings(PopupSettings.RESIZABLE | PopupSettings.SCROLLBARS).setHeight(500).setWidth(700);
ResourceLink button = new ResourceLink("list.openbutton", new ResourceReference(name) {
@Override
public IResource getResource() {
return new FileArchiveRessource(name, locale);
}
});
button.setPopupSettings(popupSettings);