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