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]