1

使用 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" />

有什么建议吗?

精度:我真的需要一个新的单独窗口,而不是一个新标签。

4

4 回答 4

3

为什么不只是在 HTML 中使用简单的链接而不是按钮?

<a href="#" target="_blank" wicket:id="list.openbutton">Open resource</a>
于 2013-11-05T09:56:31.107 回答
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>
于 2013-11-06T10:14:16.880 回答
1

尝试添加onclick="target='_blank';return true;"到您的输入

于 2013-11-05T10:47:21.303 回答
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);
于 2017-07-27T17:25:30.620 回答