Fix it like this: Index: /Users/eelcohillenius/Documents/workspace_wicket/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/Component.java =================================================================== --- /Users/eelcohillenius/Documents/workspace_wicket/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/Component.java (revision 524461) +++ /Users/eelcohillenius/Documents/workspace_wicket/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/Component.java (working copy) @@ -33,6 +33,7 @@ import wicket.authorization.UnauthorizedActionException; import wicket.behavior.IBehavior; import wicket.feedback.FeedbackMessage; +import wicket.feedback.FeedbackMessages; import wicket.markup.ComponentTag; import wicket.markup.MarkupException; import wicket.markup.MarkupStream; @@ -457,6 +458,8 @@ private static final int FLAG_ATTACHING = 0x40000000; private static final int FLAG_DETACHING = 0x80000000;
+ /** List of feedback messages to add. */ + private transient List feedbackMessages; /** Basic model IModelComparator implementation for normal object models */ private static final IModelComparator defaultModelComparator = new IModelComparator() @@ -662,7 +665,7 @@ */ public final void debug(final String message) { - getPage().getFeedbackMessages().debug(this, message); + add(new FeedbackMessage(this, message, FeedbackMessage.DEBUG)); } /** @@ -685,7 +688,7 @@ */ public final void error(final Serializable message) { - getPage().getFeedbackMessages().error(this, message); + add(new FeedbackMessage(this, message, FeedbackMessage.ERROR)); } /** @@ -696,7 +699,7 @@ */ public final void fatal(final String message) { - getPage().getFeedbackMessages().fatal(this, message); + add(new FeedbackMessage(this, message, FeedbackMessage.FATAL)); } /** @@ -1235,7 +1238,7 @@ */ public final void info(final String message) { - getPage().getFeedbackMessages().info(this, message); + add(new FeedbackMessage(this, message, FeedbackMessage.INFO)); } /** @@ -2376,7 +2379,7 @@ */ public final void warn(final String message) { - getPage().getFeedbackMessages().warn(this, message); + add(new FeedbackMessage(this, message, FeedbackMessage.WARNING)); } /** @@ -2734,6 +2737,7 @@ { setFlag(FLAG_ATTACHING, true); setFlag(FLAG_ATTACHED, true); + onAttach(); if (getFlag(FLAG_ATTACHING)) { @@ -3023,6 +3027,40 @@ } /** + * Called by the containing page to enable components to add their + * temporarily stored feedback messages to the messages instance of the + * page. + * + * @param msgs + * The feedback messages. Components can add messages to it + */ + final void addFeedback(final FeedbackMessages msgs) + { + // add deferred messages if any + if (feedbackMessages != null) + { + for (Iterator i = feedbackMessages.iterator(); i.hasNext();) + { + msgs.add((FeedbackMessage)i.next()); + } + // reset + feedbackMessages = null; + } + if (this instanceof MarkupContainer) + { + MarkupContainer container = (MarkupContainer)this; + container.visitChildren(new IVisitor() + { + public Object component(Component component) + { + component.addFeedback(msgs); + return IVisitor.CONTINUE_TRAVERSAL; + } + }); + } + } + + /** * Gets the component at the given path. * * @param path @@ -3163,6 +3201,21 @@ } /** + * Adds a feedback message to be added to the page later. + * + * @param msg + * message + */ + private final void add(FeedbackMessage msg) + { + if (feedbackMessages == null) + { + feedbackMessages = new ArrayList(); + } + feedbackMessages.add(msg); + } + + /** * Finds the root object for an IModel * * @param model Index: /Users/eelcohillenius/Documents/workspace_wicket/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/feedback/FeedbackMessages.java =================================================================== --- /Users/eelcohillenius/Documents/workspace_wicket/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/feedback/FeedbackMessages.java (revision 524461) +++ /Users/eelcohillenius/Documents/workspace_wicket/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/feedback/FeedbackMessages.java (working copy) @@ -311,7 +311,7 @@ * @param message * the message */ - final void add(FeedbackMessage message) + public final void add(FeedbackMessage message) { if (log.isDebugEnabled()) { Index: /Users/eelcohillenius/Documents/workspace_wicket/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/Page.java =================================================================== --- /Users/eelcohillenius/Documents/workspace_wicket/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/Page.java (revision 524461) +++ /Users/eelcohillenius/Documents/workspace_wicket/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/Page.java (working copy) @@ -341,6 +341,9 @@ // Set form component values from cookies setFormComponentValuesFromCookies(); + // adds temporarily stored feedback messages + addFeedback(getFeedbackMessages()); + // First, give priority to IFeedback instances, as they have to // collect their messages before components like ListViews // remove any child components That works fine. It's 4 extra bytes for the temp messages pointer and a little bit of extra overhead, but I think it is just wrong we don't support setting messages anywhere. Even if it is not a common case, every once in a while people will Serban will stumble on it, and I think it is just not very consistent to not support it. One issue with this patch is that there are a couple of unit tests that presume too much of the internal workings of the framework and fail. Fixing those shouldn't be too hard though. Eelco On 3/31/07, Matej Knopp <[EMAIL PROTECTED]> wrote: > Why don't we fix this how? Errors are stored in page. In component > constructor you don't know the page. What could work would be a > temporary array in component that would be copied to page in onattach, > but i don't really this is a common usecase. > > If you need to add errors, just do it in onAttach. > > -Matej > > On 3/31/07, Eelco Hillenius <[EMAIL PROTECTED]> wrote: > > Ok, I see. > > > > public final void error(final Serializable message) > > { > > getPage().getFeedbackMessages().error(this, message); > > } > > > > Why don't we fix this? > > > > Eelco > > > > > > On 3/31/07, Igor Vaynberg <[EMAIL PROTECTED]> wrote: > > > it works fine because you are calling error on a page and not on a > > > component. errors are stored at page-level. > > > > > > -igor > > > > > > > > > > > > On 3/31/07, Eelco Hillenius <[EMAIL PROTECTED]> wrote: > > > > > > > > Weird problem. Can you give us a stack trace please? I tried this: > > > > > > > > Index: > > > /Users/eelcohillenius/Documents/workspace_wicket/wicket-1.x/jdk-1.5/wicket-examples/src/main/java/wicket/examples/helloworld/HelloWorld.java > > > > > > > =================================================================== > > > > --- > > > /Users/eelcohillenius/Documents/workspace_wicket/wicket-1.x/jdk-1.5/wicket-examples/src/main/java/wicket/examples/helloworld/HelloWorld.java > > > (revision > > > > 524461) > > > > +++ > > > /Users/eelcohillenius/Documents/workspace_wicket/wicket-1.x/jdk-1.5/wicket-examples/src/main/java/wicket/examples/helloworld/HelloWorld.java > > > (working > > > > copy) > > > > @@ -17,7 +17,7 @@ > > > > package wicket.examples.helloworld ; > > > > > > > > import wicket.examples.WicketExamplePage; > > > > -import wicket.markup.html.basic.Label; > > > > +import wicket.markup.html.panel.FeedbackPanel; > > > > > > > > /** > > > > * Everybody's favorite example! > > > > @@ -31,6 +31,7 @@ > > > > */ > > > > public HelloWorld() > > > > { > > > > - add(new Label("message", "Hello World!")); > > > > + error("test"); > > > > + add(new FeedbackPanel("message")); > > > > } > > > > } > > > > \ No newline at end of file > > > > > > > > And that works fine... > > > > > > > > Eelco > > > > > > > > > > > > On 3/31/07, serban.balamaci <[EMAIL PROTECTED]> wrote: > > > > > > > > > > Hi. > > > > > > > > > > I have a problem in that inside the constructor of a page(panel > > > actually) i > > > > > invoke a stored procedure which needs to get the model for the panel. > > > The > > > > > stored procedure may throw an error message. The error message should > > > > > be > > > > > seen by the user, he can understand what he did wrong. So inside the > > > > > constructor i have something like this: > > > > > > > > > > public PanelConstructor() { > > > > > try { > > > > > } catch(UserPresentableException e) { > > > > > error(e.getMessage); > > > > > } > > > > > } > > > > > > > > > > The problem is that if the error is thrown i get a No page found for > > > > > component. I understand that the cause of the error is that the "error > > > > > component" not being instantiated because of the constructor not being > > > > > finished(or i think that's the cause). > > > > > > > > > > Any ideas of solutions that i can implement? > > > > > I know that i could set wicket to production instead of development > > > > > and > > > get > > > > > rid of the stack trace. The problem is that i would like to keep the > > > error > > > > > message - to show the error message back to the user-. Should i > > > > > instead > > > of > > > > > doing error(e.getMessage) rethrow the message inside a new defined > > > exception > > > > > and have a custom error page for that exception in which i would show > > > only > > > > > the message of the error. > > > > > > > > > > Is there any option that would keep me from treating the errors in the > > > > > constructor other than how i treat an error from a button push? > > > > > > > > > > Thanks. > > > > > > > > > > > > > > > > > > > > -- > > > > > View this message in context: > > > http://www.nabble.com/error%28...%29-No-page-found-for-component-tf3497125.html#a9767935 > > > > > Sent from the Wicket - User mailing list archive at Nabble.com. > > > > > > > > > > > > > > > > > > ------------------------------------------------------------------------- > > > > > Take Surveys. Earn Cash. Influence the Future of IT > > > > > Join SourceForge.net's Techsay panel and you'll get the chance to > > > > > share > > > your > > > > > opinions on IT & business topics through brief surveys-and earn cash > > > > > > > > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > > > > > _______________________________________________ > > > > > Wicket-user mailing list > > > > > Wicket-user@lists.sourceforge.net > > > > > > > > https://lists.sourceforge.net/lists/listinfo/wicket-user > > > > > > > > > > > > > > > > ------------------------------------------------------------------------- > > > > Take Surveys. Earn Cash. Influence the Future of IT > > > > Join SourceForge.net's Techsay panel and you'll get the chance to share > > > your > > > > opinions on IT & business topics through brief surveys-and earn cash > > > > > > > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > > > > _______________________________________________ > > > > Wicket-user mailing list > > > > Wicket-user@lists.sourceforge.net > > > > https://lists.sourceforge.net/lists/listinfo/wicket-user > > > > > > > > > > > > > ------------------------------------------------------------------------- > > > Take Surveys. Earn Cash. Influence the Future of IT > > > Join SourceForge.net's Techsay panel and you'll get the chance to share > > > your > > > opinions on IT & business topics through brief surveys-and earn cash > > > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > > > _______________________________________________ > > > Wicket-user mailing list > > > Wicket-user@lists.sourceforge.net > > > https://lists.sourceforge.net/lists/listinfo/wicket-user > > > > > > > > > > ------------------------------------------------------------------------- > > Take Surveys. Earn Cash. Influence the Future of IT > > Join SourceForge.net's Techsay panel and you'll get the chance to share your > > opinions on IT & business topics through brief surveys-and earn cash > > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > > _______________________________________________ > > Wicket-user mailing list > > Wicket-user@lists.sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/wicket-user > > > > ------------------------------------------------------------------------- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get the chance to share your > opinions on IT & business topics through brief surveys-and earn cash > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > _______________________________________________ > Wicket-user mailing list > Wicket-user@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/wicket-user > ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys-and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ Wicket-user mailing list Wicket-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wicket-user