> I'm trying to success messages working.  In my Detail.java page, I have:
>
>     protected void onSaveUser(User user) {
>         userManager.saveUser(user);
>         getSession().info("It worked!");
>         setRedirect(true);
>         setResponsePage(backPage);
>     }
>
> First of all, is this the proper way to put messages in flash scope?

Yep.

You typically don't need to call setRedirect yourself though. Was
there any reason for doing that? Also, flash message works good here,
but if you already know the page you are going to display it on, you
might as well set it on there.

> On my "backPage", I have the following code, but it never seems to find
> anything.
>
>         // check for success messages
>         if (!getSession().getFeedbackMessages().isEmpty()) {
>             // just display first message for now
>             add(new Label("success-messages",
> String.valueOf(getSession().getFeedbackMessages().iterator().next())));
>         } else {
>             add(new Label("success-messages", ""));
>         }

That's definitively not the way to do it :)

First of all, that code - if it would work - would obviously only take
the first message. If you want to display an arbitrary list of things,
you should use ListViews or Repeaters.

But more importantly, you should just use a FeedbackPanel. Typically,
add(new FeedbackPanel("feedback")); does the trick. If you need more
fine grained control over which messages to display, you can create it
with a IFeedbackMessageFilter. Also, not relevant for this case, but
take a look at FormComponentFeedbackBorder as well.

Another note is that the way you do labels in your example is rather
static. Typically you should try to use models that work in a 'pull'
way (gets the results just in time/ when rendering).

Take this code (which is comparable to what you did):

SomeObject foo = ...
if (foo != null) {
  add(new Label("foo", foo.toString));
} else {
  add(new Label("foo", ""));
}

rather you should do:

SomeObject foo = bar.getFoo();
add(new Label("foo", new Model(foo)));

or more dynamic (evaluated on every request)

add(new Label("foo", new PropertyModel(bar, "foo")));

or even

add(new Label("foo", new AbstractReadOnlyModel(){
  public Object getObject() {
    return bar.getFoo();
  }
});

for complete control.

Hope that helps,

Eelco

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user

Reply via email to