【问题标题】:java wicket link onclick code does not execute on second clickjava wicket链接onclick代码在第二次点击时不执行
【发布时间】:2017-04-28 01:13:44
【问题描述】:

我在包含数据视图的页面内创建了一个片段,其中包含一个链接。数据视图包含包含成员姓名和其他列的链接,其中包含成员信息(如生日)。该链接应该使用 JasperSoft(PDF) 显示所选成员的信息。事情是在第一次点击时一切顺利,但在下一次点击时它不会执行 onclick() 中的代码。但它仍然显示报告。它从缓存中检索数据。

private class SearchResultFragment extends Fragment {
    private SearchResultFragment(String id, String markupId) {
        super(id, markupId, MemberInformationReportFilterPage.this);

        setOutputMarkupId(true);

        DataView<Member> dataView = new DataView<Member>("dataView", dataProvider) {
            protected void populateItem(Item<Member> item) {
                final MemberModel memberModel = new MemberModel(item.getModelObject());

                Link<Void> link = new Link<Void>("link") {
                    @Override
                    public void onClick() {
                        try {/*method to show the PDF report containing the member's info */
                            reportService.showJasperReport(LocalConstants.REPORT_SOURCE_MEMBERSHIP, getRequestCycle(), getData(memberModel), "member_information.jrxml", getParam(memberModel));
                        } catch (InvalidParameterException|ReportsException e) {
                            setRendered(false);
                            logger.errorException(e.getClass(), e.getMessage());
                            getSession().error(e.getFeedbackMessage());
                        }
                    }
                };
                link.add(new AttributeAppender("target", Model.of("_blank")));

                item.add(link);

这里不应该从缓存中获取数据,因为不会显示成员的新更新。

请就如何确保系统始终在每次用户点击时执行 onclick 代码提出建议。谢谢

【问题讨论】:

  • 是否有任何错误(JavaScript 或服务器日志中)?是否有第二次点击链接的 HTTP 请求?
  • JavaScript 或服务器日志中没有错误。我很抱歉我是个菜鸟,但我不知道如何检查是否有 HTTP 请求以第二次点击链接。
  • 在浏览器的 DevTools > Network 选项卡中
  • 是的,有第二次点击的 HTTP 请求。除了 If-Modified-Since 之外,第一次和第二次点击具有相同的 Request Headers 数据。
  • 似乎 Wicket 出于某种原因不允许点击。你能创建一个迷你应用程序来重现问题并在某处分享吗?

标签: java hyperlink onclick wicket


【解决方案1】:

我不确定此解决方案是否可以解决您的问题。但在我的情况下,我在执行onclick函数时必须下载一个新的pdf,我发现你必须添加.setCacheDuration(Duration.ONE_SECOND)以便第二次调用onclick函数。

getRequestCycle().scheduleRequestHandlerAfterCurrent(
    new ResourceStreamRequestHandler(resourceStream)
        .setFileName("my.pdf")
        .setContentDisposition(ContentDisposition.ATTACHMENT)
        .setCacheDuration(Duration.ONE_SECOND)
);  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-16
    • 2013-04-20
    • 2022-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-24
    相关资源
    最近更新 更多