代码之家  ›  专栏  ›  技术社区  ›  umesh_sarkar

如何在类中的计时器方法中显示HTML标记组件

  •  0
  • umesh_sarkar  · 技术社区  · 8 年前

    在计时器事件中,我想使组件再次可见。有什么不同的方法来完成这项任务吗?我附上了snipet belove。

      <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)
    
    3 回复  |  直到 8 年前
        1
  •  3
  •   martin-g    8 年前

    你不能只使用 java.util.Timer

    你必须使用 org.apache.wicket.ajax.AbstractAjaxTimerBehavior 相反

        2
  •  0
  •   Alexei Stepanov    8 年前

    informationBox.setOutputMarkupId(true);
    informationBox.setOutputMarkupPlaceholderTag(true)
    
        3
  •  0
  •   umesh_sarkar    8 年前

    我把我的答案放在这里,这样可以帮助观众,谢谢@Alexei和@martin,你们两个家伙的答案很有帮助。

     WebMarkupContainer informationBox = new WebMarkupContainer("alert_app");
     informationBox.add(new AjaxLink("alert1"){
    
            @Override
            public void onClick(AjaxRequestTarget target) {
                // TODO Auto-generated method stub
                this.setResponsePage(ABC.class);
            } });
    
        add(informationBox);
        informationBox.setOutputMarkupId(true);
        informationBox.setOutputMarkupPlaceholderTag(true);
    
    
       informationBox.setVisible(false);
    
       this.add(new AbstractAjaxTimerBehavior(Duration.seconds(5))
        {
            private static final long serialVersionUID = 1L;
    
            @Override
            protected void onTimer(AjaxRequestTarget target)
            {
                target.add(informationBox.setVisible(true));
                System.out.println("on timer");
    
                stop(target);
            }
        });
    
    推荐文章