AjaxFallBackLink 的 Wicket 8.x 迁移问题

如何解决AjaxFallBackLink 的 Wicket 8.x 迁移问题

我们正在将 Web 应用程序从 Wicket 6.30 迁移到 Wicket 8.11.0。 第一步,放置在类路径中的 jars 下方。

wicket-auth-roles-8.11.0.jar wicket-core-8.11.0.jar wicket-datetime-8.0.0-M7.jar wicket-extensions-8.11.0.jar wicket-request-8.11.0.jar wicket-util-8.11.0.jar wicketstuff-inmethod-grid-8.11.0.jar

解决了与 AjaxFallBackLink onClick() 方法相关的编译问题。 将方法签名更改为 public void onClick(Optional target)。

我们有一个 Html 页面

设置面板.html

 <?xml version="1.0" encoding="UTF-8"?>
    <html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd" lang="en">
    <wicket:panel>
    <a href="#" wicket:id="saveSettingsLink"><img wicket:id="saveIcon" /></a>
    </wicket:panel>
    </html>

设置面板.java

AjaxFallbackLink<Serializable> settingsLink = new AjaxFallbackLink<Serializable>("saveSettingsLink") {
     private static final long serialVersionUID = 1L;
                      @Override
    public void onClick(Optional<AjaxRequestTarget> target) {
                            //some logic
    target.get().add(Feedback);
                            
    }
     };
      Image img = new Image("saveIcon",new Model<Serializable>() {
      private static final long serialVersionUID = 1L;
    @Override
      public Serializable getobject() {
                            return new PackageResourceReference(SettingsPanel.class,"save.png");
                      }
      });
     img.add(new AttributeModifier("title",new StringResourceModel("saveTitle",ColumnSettingsLinkPanel.this,new Model<String>())));
    settingsLink.add(img);

使用上述代码,在 Wicket 6.30 中,保存图像 (save.png) 显示页面上,当用户单击图像链接时,onlick(AjaxRequestTarget target) 被触发。 迁移到 Wicket 8.11.0 后,页面不显示图像,当用户单击图像链接时,会触发 onClick(Optional target),但目标值始终为 Empty。

下面是堆栈跟踪 错误 - DefaultExceptionMapper - 发生意外错误

java.util.NoSuchElementException: No value present
at java.base/java.util.Optional.get(Optional.java:148)
at com.csc.pts.web.ui.ColumnSettingsLinkPanel$3.onClick(SettingsPanel.java:98)
at org.apache.wicket.ajax.markup.html.AjaxFallbackLink.onClick(AjaxFallbackLink.java:122)
at org.apache.wicket.markup.html.link.Link.onRequest(Link.java:189)
at org.apache.wicket.core.request.handler.ListenerRequestHandler.internalInvoke(ListenerRequestHandler.java:306)
at org.apache.wicket.core.request.handler.ListenerRequestHandler.invoke(ListenerRequestHandler.java:255)
at org.apache.wicket.core.request.handler.ListenerRequestHandler.invokeListener(ListenerRequestHandler.java:215)
at org.apache.wicket.core.request.handler.ListenerRequestHandler.respond(ListenerRequestHandler.java:208)
at org.apache.wicket.core.request.handler.RequestSettingRequestHandler.respond(RequestSettingRequestHandler.java:78)
at org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:912)
at org.apache.wicket.request.RequestHandlerExecutor.execute(RequestHandlerExecutor.java:65)
at org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:283)
at org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:253)
at org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:221)
at org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:262)
at org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:204)
at org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:286)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:496)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)
at org.apache.tomcat.util.net.socketProcessorBase.run(SocketProcessorBase.java:49)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:834)

您能否就使此功能与 Wicket 8.11.0 版本一起使用所需的更改提出建议。

谢谢, 萨提亚

解决方法

你必须使用

target.ifPresent(t -> t.add(feedback));

代替

target.get().add(feedback);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?