Skip to content


Wicket Eclipse Plugin – qwickie

Zufällig bin ich auf ein Wicket-Eclipse-Plugin gestoßen, dass im täglichen Umgang mit Wicket-basierten Projekten zu einer nicht unwesentlichen Arbeitserleichterung führt. In Anbetracht des frühen Entwicklungsstadiums (Version 0.1) ist das bereits eine reife Leistung.

Was macht das Plugin?

Mit dem Plugin ist es möglich, durch den Klick auf die Wicket-ID einer Komponente zwischen Java-Klasse und zugehörigen Markup wechseln zu können. Dabei springt der Cursor gleich an die richtige Stelle. Kurz: Das ist genau das, was ich am häufigsten benötige.

Bei der Installation sollte man zwei Dinge beachten: 1. Das Plugin befindet sich wirklich noch in einem sehr frühen Stadium, so dass Fehler auftreten. Man muss also abwägen, ob der Vorteil die Nachteile aufwiegt. 2. Die Hinweise zur Installation und zur Handhabung auf der Seite sollte man beachten.

Diese Plugin sollte man im Auge behalten. Sofern es meine Zeit erlaubt, werde ich versuchen, an diesem Plugin mitzuentwickeln.

Share and Enjoy:
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks

Posted in Allgemein, eclipse, Technologie, Wicket.

Tagged with , , .


Wicket – AbstractEvent Update

Wie ich bereits beschrieben habe, kann man mit Wicket relativ leicht eine lose Koppelung von Komponenten über einen Event-Mechanismus erreichen. Dabei wurden bisher nur Komponenten berücksichtigt. Manchmal ist es aber sinnvoll, die Behandlung dieser Events an einer zentralen Stelle durchzuführen. Daher habe ich die Basisklasse leicht erweitert. Dabei ist der Visitior in eine eigene Klasse gewandert. Außerdem ist es wesentlich geschickter, auch bei nicht Ajax-Requests mit Events zu arbeiten. Die Modifikation des EventListener-Interface trägt dem Rechnung.

 Java(TM) 2 Platform Standard Edition 5.0 |  copy code |? 
1
package de.wicketpraxis.web.blog.pages.questions.events;
2
 
3
public interface EventListenerInterface
4
{
5
  public void notifyEvent(AbstractEvent event);
6
}
7

Die Methode lautet nun notifyEvent statt notifyAjaxEvent.

 Java(TM) 2 Platform Standard Edition 5.0 |  copy code |? 
01
package de.wicketpraxis.web.blog.pages.questions.events;
02
 
03
import org.apache.wicket.Component;
04
import org.apache.wicket.Component.IVisitor;
05
 
06
public class NotifyVisitor implements IVisitor<Component> 
07
{
08
  private final AbstractEvent _event;
09
 
10
  public NotifyVisitor(final AbstractEvent event)
11
  {
12
    _event = event;
13
  }
14
 
15
  public Object component(final Component component)
16
  {
17
    if (component instanceof EventListenerInterface) 
18
    {
19
      ((EventListenerInterface) component).notifyEvent(_event);
20
    }
21
    return IVisitor.CONTINUE_TRAVERSAL;
22
  }
23
}

Der Event sucht jetzt nicht nur in allen Komponenten nach dem EventListenerInterface, sondern auch in der Application, der Session und der Page.

 Java(TM) 2 Platform Standard Edition 5.0 |  copy code |? 
01
package de.wicketpraxis.web.blog.pages.questions.events;
02
 
03
import org.apache.wicket.Application;
04
import org.apache.wicket.Component;
05
import org.apache.wicket.Page;
06
import org.apache.wicket.Session;
07
import org.apache.wicket.Component.IVisitor;
08
import org.apache.wicket.ajax.AjaxRequestTarget;
09
 
10
public class AbstractEvent
11
{
12
  private final Component _source;
13
  protected final AjaxRequestTarget _target;
14
 
15
  public AbstractEvent(final Component source, AjaxRequestTarget target)
16
  {
17
    _source = source;
18
    _target = target;
19
  }
20
 
21
  public AbstractEvent(final Component source)
22
  {
23
    this(source,null);
24
  }
25
 
26
  public Component getSource()
27
  {
28
    return _source;
29
  }
30
 
31
  /**
32
   * notify Application, Session, Page and Components
33
   */
34
  public final void fire()
35
  {
36
    Page page=getSource().getPage();
37
 
38
    Application application=page.getApplication();
39
    if (application instanceof EventListenerInterface)
40
    {
41
      ((EventListenerInterface) application).notifyEvent(this);
42
    }
43
    Session session=page.getSession();
44
    if (session instanceof EventListenerInterface)
45
    {
46
      ((EventListenerInterface) session).notifyEvent(this);
47
    }
48
    if (page instanceof EventListenerInterface)
49
    {
50
      ((EventListenerInterface) page).notifyEvent(this);
51
    }
52
    page.visitChildren(EventListenerInterface.class, getVisitor());
53
    onAfterFire();
54
  }
55
 
56
  protected  void onAfterFire()
57
  {
58
 
59
  }
60
 
61
  protected IVisitor<Component> getVisitor()
62
  {
63
    return new NotifyVisitor(this);
64
  }
65
 
66
  public AjaxRequestTarget getTarget()
67
  {
68
    return _target;
69
  }
70
 
71
  public boolean isAjax()
72
  {
73
    return _target!=null;
74
  }
75
 
76
  public final void update(Component component)
77
  {
78
    if (_target!=null)
79
    {
80
      _target.addComponent(component);
81
    }
82
  }
83
 
84
}

Hinzugekommen ist außerdem die Funktion onAfterFire() die aufgerufen wird, sobald alle möglichen Listener benachrichtig wurden. An dieser Stelle könnte man dann Prüfungen einbauen, ob z.B. der Event überhaupt ein Ziel erreicht hat.

Ich glaube, dass diese Lösung zu offensichtlich war, so dass man sie leicht übersehen konnte.

Share and Enjoy:
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks

Posted in Wicket.

Tagged with , , .


Wicket Heatmap – Ajax mit Parametern