java wicket链接onclick代码在第二次点击时不执行

Posted

技术标签:

【中文标题】java wicket链接onclick代码在第二次点击时不执行【英文标题】:java wicket link onclick code does not execute on second click 【发布时间】: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 出于某种原因不允许点击。你能创建一个迷你应用程序来重现问题并在某处分享吗? 【参考方案1】:

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

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

【讨论】:

以上是关于java wicket链接onclick代码在第二次点击时不执行的主要内容,如果未能解决你的问题,请参考以下文章

onClick 中的第二个意图在第一个之前执行

React Leaflet Routing Machine:onClick to add Marker after all the waypoints are removed仅在第二次单击后触发

Wicket 1.5 - 浏览器 Pdf 从 freemaker 模板打印到字节 []

Wicket中表单组件的国际化标签

Wicket:通过 Javascript 更新文本字段

jQuery onclick仅适用于第二次点击