java - 如何在类的 Timer 方法中可见 HTML 标记组件

标签 java apache jakarta-ee jboss wicket

在计时器事件中,我想再次使该组件可见。有什么不同的方法来完成这个任务吗?我附上了狙击手亲爱的。

HTML 标记:在此文件中我创建警报栏

  <div Class="row" wicket:id="alert_app" >
      <div  class="alert alert-info" role="alert" style="top: 2%; left: 50%; position: absolute;">
      <a href="#" wicket:id="alert" style="color:red"  >Alert - Match Found</a>

     </div>
    </div>    

Java类:我已经实例化了WebMarkupContainer并在初始阶段使其不可见,在5秒警报栏出现后(这是我的计划),因为我使用了计时器并且陷入了计时器事件。

 WebMarkupContainer informationBox = new WebMarkupContainer("alert_app");
     add(informationBox);

        final AjaxLink saveProfile = new AjaxLink("alert") {

        private static final long serialVersionUID = 1L;

        public void onClick(AjaxRequestTarget target) {

            this.setResponsePage(ABC.class);
        }

    };

    informationBox.add(saveProfile);
    informationBox.setVisible(false);  

    Timer timer = new Timer();

    timer.schedule(new TimerTask() {

        @Override
        public void run() {

            informationBox.setVisibilityAllowed(true);

            informationBox.setVisible(true);   // I got error in this line

        }
    }, 5000);

错误:

   12:37:04,735 INFO  
  [org.apache.wicket.response.filter.AjaxServerAndClientTimeFilter] (http-
   localhost-127.0.0.1-8080-4) 1ms server time taken for request 
wicket/bookmarkable/xyz.abc.vbn.class?
4&username=user+name response size: 9386
12:37:09,736 ERROR [stderr] (Timer-3) Exception in thread "Timer-3" 
org.apache.wicket.WicketRuntimeException: No RequestCycle is currently set!

12:37:09,736 ERROR [stderr] (Timer-3)   at 
org.apache.wicket.Component.getRequest(Component.java:1791)

12:37:09,736 ERROR [stderr] (Timer-3)   at 
org.apache.wicket.markup.html.WebPage.dirty(WebPage.java:334)

12:37:09,736 ERROR [stderr] (Timer-3)   at 
org.apache.wicket.Page.dirty(Page.java:248)

12:37:09,736 ERROR [stderr] (Timer-3)   at 
org.apache.wicket.Page.componentStateChanging(Page.java:937)

12:37:09,736 ERROR [stderr] (Timer-3)   at 
org.apache.wicket.Component.addStateChange(Component.java:3512)

12:37:09,736 ERROR [stderr] (Timer-3)   at 
org.apache.wicket.Component.setVisible(Component.java:3195)


 12:37:09,736 ERROR [stderr] (Timer-3)  at 
 java.util.TimerThread.mainLoop(Timer.java:555)

 12:37:09,736 ERROR [stderr] (Timer-3)  at 
 java.util.TimerThread.run(Timer.java:505)

最佳答案

您不能只使用java.util.Timer。它启动一个不是 HTTP 工作线程的新线程,因此 WicketFilter 没有机会设置 ThreadLocal(应用程序、 session 和 RequestCysle)。

您必须使用org.apache.wicket.ajax.AbstractAjaxTimerBehavior。 它将在给定的持续时间后触发一个新的 Ajax 请求,一切都会按预期工作!

关于java - 如何在类的 Timer 方法中可见 HTML 标记组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45188579/

相关文章:

java - 在 jlabel 上使用嵌套循环

Java 类与 C++ 类

apache - 通过一个 php 文件处理任何页面的 http 请求并从 index.html 重定向

php - Windows 10 上的 Memcache PHP 扩展间歇性工作

java - 我应该将图像存储在内容管理系统的什么位置?

JAVA-EE7/javax.ws.rs : Injection of EJB in REST-Resource

Java Servlet 翻译API请求编码问题: german characters

java - 使用引用变量调用静态方法

java - 在spark中使用stanford nlp,错误 "Class java.util.function.Function not found - continuing with a stub."

php - 使用php将数据插入数据库中没有填充APACHE2的行