>>  Overriding onBeforeRender() doesn't work on Ajax, it's not called :(
>
>it is, but only on components that get updated via ajax...so you might
>want to move the code to one of those...

Now the code gets call in Ajax. But the error message still doesn't show up
in FeedbackPanel.  Does this make sense to you at all?


On Wed, Mar 19, 2008 at 6:23 PM, Igor Vaynberg <[EMAIL PROTECTED]>
wrote:

> On Wed, Mar 19, 2008 at 5:54 PM, Matthew Young <[EMAIL PROTECTED]> wrote:
> > Hi Igor,
> >
> >  Overriding onBeforeRender() doesn't work on Ajax, it's not called :(
>
> it is, but only on components that get updated via ajax...so you might
> want to move the code to one of those...
>
> >  Is there anyway to handle this kind of error condition for both Ajax
> and
> >  non-Ajax?
>
> see above
>
> >  Having to abandon LoadableDeachableModel is a pity.  The code is much
> >  clearer with LoadableDeachableModel.  Anyway, does Wicket have any way
> to
> >  let user code handle model error late in the render phase?
>
> yes it is a pity. we consider errors that happen inside models
> unrecoverable because they can happen at a lot of different points in
> the lifecycle of the component. i think throwing a
> restartresponseexception from inside a model might work, but that will
> only get you to a different page....hmm, maybe... { error("failed");
> throw restartresponseexception(MyPage.this); } will work, but then you
> gotta watch out for an infinite loop... you would have to first check
> if the page contains any error messages...
>
> -igor
>
>
>
>
> >  Thanks!
> >
> >  On Wed, Mar 19, 2008 at 2:53 PM, Igor Vaynberg <[EMAIL PROTECTED]
> >
> >  wrote:
> >
> >
> >
> >  > im thinking it might be too late at that point to register the
> >  > messages because the feedback panel might have already rendered...
> >  >
> >  > perhaps instead of using a loadable detachable model you do something
> like
> >  > this:
> >  >
> >  > class mypage {
> >  >  private List result;
> >  >
> >  >  onbeforerender() {
> >  >      try {
> >  >        result=populatelist();
> >  >      } catch (exception e) {
> >  >        error("foo");
> >  >      }
> >  >      super.onbeforerender();
> >  >   }
> >  >
> >  >   ondetach() { result=null; super.ondetach(); }
> >  >
> >  >
> >  >   .. add(new listview("foo", new propertymodel(this, "result"));
> >  >
> >  > }
> >  >
> >  > -igor
> >  >
> >  >
> >  >
> >  > On Wed, Mar 19, 2008 at 2:04 PM, Matthew Young <[EMAIL PROTECTED]>
> wrote:
> >  > >  I register an error to the page in the model but the feedback
> message
> >  > >  doesn't show in FeedbackPanel.  Only the error message register in
> >  > >  onSubmit() event handler shows.  Please have a look.  Thanks!
> >  > >
> >  > >  HomePage.html:
> >  > >
> >  > >  <html>
> >  > >  <head></head>
> >  > >     <span wicket:id="message">message will be here</span>
> >  > >     <form wicket:id="form">
> >  > >         <input type="text" wicket:id="word"/>
> >  > >         <input type="submit" value="Enter"
> wicket:id="submitButton"/>
> >  > >     </form>
> >  > >     <span wicket:id="feedback">FEEDBACK</span>
> >  > >  </html>
> >  > >
> >  > >
> >  > >  HomePage.java
> >  > >
> >  > >  import ...
> >  > >
> >  > >  public class HomePage extends WebPage {    private static final
> long
> >  > >  serialVersionUID = 1L;
> >  > >
> >  > >     private String word;
> >  > >
> >  > >     public HomePage(final PageParameters parameters) {
> >  > >
> >  > >         add(new
> >  > >  FeedbackPanel("feedback").setOutputMarkupPlaceholderTag(true));
> >  > >         // if the word 'blowup' is entered, this model register a
> error
> >  > >  message to the page
> >  > >         IModel model = new Model() {            private static
> final
> >  > long
> >  > >  serialVersionUID = 1L;
> >  > >             @Override public Object getObject() {
> >  > >                 if (word != null && word.equals("blowup")) {
> >  > >                     word = "-b-l-o-w-u-p-";
> >  > >                     HomePage.this.fatal("This message is from
> model.");
> >  > >                     return "BAD THING HAPPENED IN MODEL";
> >  > >                 } else {
> >  > >                     return "The word is: \"" + (word == null ? " n
> u l l
> >  > " :
> >  > >  word) + "\"";
> >  > >                 }
> >  > >             }
> >  > >         };
> >  > >         add(new Label("message", model).setOutputMarkupId(true));
> >  > >         Form form = new Form("form", new
> CompoundPropertyModel(this));
> >  > >         add(form);
> >  > >         form.add(new TextField("word").setRequired(true));
> >  > >
> >  > >         AjaxFallbackButton submitButton = new
> >  > >  AjaxFallbackButton("submitButton", form) {
> >  > >             private static final long serialVersionUID = 1L;
> >  > >             @Override protected void onSubmit(AjaxRequestTarget
> target,
> >  > Form
> >  > >  f) {
> >  > >                 if (word != null && word.equals("blowup")) {
> >  > >                     HomePage.this.error("This message is from
> onSubmit.
> >  > >  There should also be a message from model");
> >  > >                 }
> >  > >                 if (target != null) {
> >  > >                     target.addComponent(HomePage.this.get
> ("feedback"));
> >  > >                     target.addComponent(HomePage.this.get
> ("message"));
> >  > >                 }
> >  > >             }
> >  > >
> >  > >             @Override protected void onError(AjaxRequestTarget
> target,
> >  > Form
> >  > >  f) {
> >  > >                 target.addComponent(HomePage.this.get("feedback"));
> >  > >  // show updated error feedback
> >  > >             }
> >  > >         };
> >  > >         form.add(submitButton);
> >  > >     }
> >  > >  }
> >  > >
> >  >
> >  > ---------------------------------------------------------------------
> >  > To unsubscribe, e-mail: [EMAIL PROTECTED]
> >  > For additional commands, e-mail: [EMAIL PROTECTED]
> >  >
> >  >
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>

Reply via email to