Thank you Igor for showing me this.  Wow, so much new stuff for me in
there.  I'll dig in and try to understand it all.

On Thu, Mar 20, 2008 at 3:54 PM, Igor Vaynberg <[EMAIL PROTECTED]>
wrote:

> in a real app people will be invested in fixing the issue and not
> having someone else do their homework for them :)
>
> like i said, right now we consider errors in models unrecoverable - eg
> you go to an error page. seemed to satisfy everyone for 3? years that
> wicket has been out.
>
> that said, you can get a little creative and come up with something.
> stuff below should work with regular requests, havent tested it with
> ajax yet.
>
>
> -igor
>
>        public abstract static class ErrorAwareModelAdapter
>                        implements
>                                IModel,
>                                IComponentAssignedModel,
>                                IWrapModel
>        {
>                private boolean error = false;
>                private final IModel delegate;
>                private Component component;
>
>                public ErrorAwareModelAdapter(IModel delegate)
>                {
>
>                        this.delegate = delegate;
>                }
>
>                /** gets value that should be returned from
> getobject() if exception is thrown */
>                protected Object getErrorResult()
>                {
>                        return null;
>                }
>
>                /** handles the error - such as
> component.getsession().error(e.getmessage()); */
>                protected void handleError(RuntimeException e)
>                {
>
>                }
>
>                @Override
>                public Object getObject()
>                {
>                        if (error)
>                        {
>                                error = false;
>                                return getErrorResult();
>                        }
>                        else
>                        {
>                                try
>                                {
>                                        return delegate.getObject();
>                                }
>                                catch (RuntimeException e)
>                                {
>                                        error = true;
>                                        handleError(e);
>                                        component.getPage().detach();
>                                        throw new
> AbstractRestartResponseException()
>                                        {
>                                        };
>                                }
>                        }
>                }
>
>
>                @Override
>                public void setObject(Object object)
>                {
>                        delegate.setObject(object);
>                }
>
>
>                @Override
>                public void detach()
>                {
>                        delegate.detach();
>                }
>
>
>                @Override
>                public IWrapModel wrapOnAssignment(Component component)
>                {
>                        this.component = component;
>                        return this;
>                }
>
>
>                @Override
>                public IModel getWrappedModel()
>                {
>                        return delegate;
>                 }
>
>        }
>
>
> On Thu, Mar 20, 2008 at 2:48 PM, Matthew Young <[EMAIL PROTECTED]> wrote:
> > Then what? In real app, the model is calling some flakey remote service
> that
> >  can fail.  Is there no way to show error message on the same page?
>  That the
> >  only thing is put up a different error page?
> >
> >
> >
> >  On Thu, Mar 20, 2008 at 1:29 PM, Matej Knopp <[EMAIL PROTECTED]>
> wrote:
> >
> >  > This doesn't work because the model.getObject method is only called
> >  > when the value is pulled out of the model, which is on label render.
> >  > Even if you refresh it on ajax request, it might be too late because
> >  > the feedback panel retrieves the feedback messages in onBeforeRender
> >  > (before actual rendering).
> >  >
> >  > -Matej
> >  >
> >  > On Wed, Mar 19, 2008 at 10: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);
> >  > >     }
> >  > >  }
> >  > >
> >  >
> >  >
> >  >
> >  > --
> >  > Resizable and reorderable grid components.
> >  > http://www.inmethod.com
> >  >
> >  > ---------------------------------------------------------------------
> >  > 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