Hi Igor,

Overriding onBeforeRender() doesn't work on Ajax, it's not called :(

Is there anyway to handle this kind of error condition for both Ajax and
non-Ajax?

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?

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]
>
>

Reply via email to