On Mon, 09 Jun 2008, freak182 wrote:
> Im having problem of updating parents components.Hereis my problem, there is
> page and in that page there is a panel. The panel contain a
> FormUpdatingComponent that attached to a dropdownchoice. Now when the
> dropdown is triggered, i want to update the parents (the page)
> textbox/label..is this possible?

Hmm, what is FormUpdatingComponent?-) A typo perhaps?

Sure it is possible, e.g. something like

public class FooPage extends WebPage {
    public FooPage() {
        Panel fooPanel = new FooPanel("fooPanel", ... 
        ....
        Foo initialSelection = ...
        IModel fooModel = new Model(initialSelection);
        final Label display = new Label("foo", fooModel);
        display.setOutputMarkupId(true);
        add(display);
        DropDownChoice selection = new DropDownChoice("fooSelection",
            fooModel, choices);
        selection.add(new AjaxFormComponentUpdatingBehavior("onchange) {
            public void onEvent(AjaxRequestTarget target) {
                target.addComponent(display);
            }
        });
        fooPanel.add(selection);
        ...
    }
}

But if your Panel is "further away" from the other
components directly on the page, this might get trickier.
For normal requests you can often get away with sharing the
model, but if passing it all the way to the "sending"
component gets nasty, or if you want to repaint something in
the parent via Ajax, something like this might be easier

public interface FooChoiceListener {
  void onSelection(IModel foo, AjaxRequestTarget target);
}

public class MyLabel extends Label implements FooChoiceListener {
...
  public void onSelection(IModel foo, AjaxRequestTarget target) {
    setModelObject(foo.getObject());
    target.addComponent(this);
  }
}


public class FooPage extends WebPage {
  public FooPage() {
    Label display = new MyLabel(...);
    add(new FooPanel());
    ...
  }
}

public class FooPanel extends Panel {
  public FooPanel(String id, IModel foo) {
  ...
    DropDownChoice selection = new DropDownChoice("fooSelection",
      fooModel, choices);
    selection.add(new AjaxFormComponentUpdatingBehavior("onchange) {
      public void onEvent(AjaxRequestTarget target) {
        getPage().visitChildren(FooChoiceListener.class, 
           new IVisitor() {
             public Object component(Component c) {
               ((FooChoiceListener) c).onSelection(fooModel, target);
               return CONTINUE_TRAVERSAL;
             }
        });
      }
    });
  }
}

A "generic eventbroadcaster" can be found here

  http://issues.apache.org/jira/browse/WICKET-1312

Best wishes,
Timo

-- 
Timo Rantalaiho           
Reaktor Innovations Oy    <URL: http://www.ri.fi/ >

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to