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代码在第二次点击时不执行的主要内容,如果未能解决你的问题,请参考以下文章
React Leaflet Routing Machine:onClick to add Marker after all the waypoints are removed仅在第二次单击后触发