Author: knopp Date: Sat Sep 1 10:42:51 2007 New Revision: 571837 URL: http://svn.apache.org/viewvc?rev=571837&view=rev Log: WICKET-836
Modified: wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/Component.java wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/MarkupContainer.java wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/Page.java wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/feedback/FeedbackMessagesModel.java wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/feedback/IFeedback.java wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/panel/FeedbackPanel.java wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/component/ComponentRequestTarget.java Modified: wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/Component.java URL: http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/Component.java?rev=571837&r1=571836&r2=571837&view=diff ============================================================================== --- wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/Component.java (original) +++ wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/Component.java Sat Sep 1 10:42:51 2007 @@ -30,6 +30,7 @@ import org.apache.wicket.authorization.UnauthorizedActionException; import org.apache.wicket.behavior.IBehavior; import org.apache.wicket.feedback.FeedbackMessage; +import org.apache.wicket.feedback.IFeedback; import org.apache.wicket.markup.ComponentTag; import org.apache.wicket.markup.MarkupException; import org.apache.wicket.markup.MarkupStream; @@ -792,11 +793,7 @@ internalAttach2(); } - /** - * Called for every component when the page is getting to be rendered. it will call - * onBeforeRender for this component and all the child components - */ - public final void beforeRender() + private final void internalBeforeRender() { if (isVisible() && !getFlag(FLAG_RENDERING) && !getFlag(FLAG_PREPARED_FOR_RENDER)) { @@ -815,6 +812,42 @@ } /** + * We need to postpone calling beforeRender() on components that implement IFeedback, to be sure + * that all other component's beforeRender() has been already called, so that IFeedbacks can + * collect all feedback messages. This is the key under list of postponed IFeedback is stored to + * request cycle metadata. The List is then iterated over in [EMAIL PROTECTED] #prepareForRender()} after + * calling [EMAIL PROTECTED] #beforeRender()}, to initialize postponed components. + */ + private static final MetaDataKey FEEDBACK_LIST = new MetaDataKey(List.class) + { + private static final long serialVersionUID = 1L; + }; + + /** + * Called for every component when the page is getting to be rendered. it will call + * onBeforeRender for this component and all the child components + */ + public final void beforeRender() + { + if (!(this instanceof IFeedback)) + { + internalBeforeRender(); + } + else + { + // this component is a feedback. Feedback must be initialized last, so that + // they can collect messages from other components + List feedbacks = (List)getRequestCycle().getMetaData(FEEDBACK_LIST); + if (feedbacks == null) + { + feedbacks = new ArrayList(); + getRequestCycle().setMetaData(FEEDBACK_LIST, (Serializable)feedbacks); + } + feedbacks.add(this); + } + } + + /** * Redirects to any intercept page previously specified by a call to redirectToInterceptPage. * * @return True if an original destination was redirected to @@ -1803,6 +1836,16 @@ public void prepareForRender() { beforeRender(); + List feedbacks = (List)getRequestCycle().getMetaData(FEEDBACK_LIST); + if (feedbacks != null) + { + for (Iterator i = feedbacks.iterator(); i.hasNext();) + { + Component feedback = (Component)i.next(); + feedback.internalBeforeRender(); + } + } + getRequestCycle().setMetaData(FEEDBACK_LIST, null); markRendering(); } @@ -2020,8 +2063,7 @@ // Make sure that while rendering the markup stream is found parent.setMarkupStream(markupStream); - beforeRender(); - markRendering(); + prepareForRender(); // check authorization // first the component itself // (after attach as otherwise list views etc wont work) Modified: wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/MarkupContainer.java URL: http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/MarkupContainer.java?rev=571837&r1=571836&r2=571837&view=diff ============================================================================== --- wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/MarkupContainer.java (original) +++ wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/MarkupContainer.java Sat Sep 1 10:42:51 2007 @@ -208,8 +208,7 @@ this.remove(component); } add(component); - component.beforeRender(); - component.markRendering(); + component.prepareForRender(); if (markupStream == null) { component.render(); Modified: wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/Page.java URL: http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/Page.java?rev=571837&r1=571836&r2=571837&view=diff ============================================================================== --- wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/Page.java (original) +++ wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/Page.java Sat Sep 1 10:42:51 2007 @@ -28,7 +28,6 @@ import org.apache.wicket.authorization.IAuthorizationStrategy; import org.apache.wicket.authorization.UnauthorizedActionException; import org.apache.wicket.authorization.strategies.page.SimplePageAuthorizationStrategy; -import org.apache.wicket.feedback.IFeedback; import org.apache.wicket.markup.MarkupException; import org.apache.wicket.markup.MarkupStream; import org.apache.wicket.markup.html.WebPage; @@ -49,72 +48,61 @@ /** - * Abstract base class for pages. As a MarkupContainer subclass, a Page can - * contain a component hierarchy and markup in some markup language such as - * HTML. Users of the framework should not attempt to subclass Page directly. - * Instead they should subclass a subclass of Page that is appropriate to the - * markup type they are using, such as WebPage (for HTML markup). + * Abstract base class for pages. As a MarkupContainer subclass, a Page can contain a component + * hierarchy and markup in some markup language such as HTML. Users of the framework should not + * attempt to subclass Page directly. Instead they should subclass a subclass of Page that is + * appropriate to the markup type they are using, such as WebPage (for HTML markup). * <ul> - * <li><b>Construction </b>- When a page is constructed, it is automatically - * added to the current PageMap in the Session. When a Page is added to the - * Session's PageMap, the PageMap assigns the Page an id. A PageMap is roughly - * equivalent to a browser window and encapsulates a set of pages accessible - * through that window. When a popup window is created, a new PageMap is created - * for the popup. + * <li><b>Construction </b>- When a page is constructed, it is automatically added to the current + * PageMap in the Session. When a Page is added to the Session's PageMap, the PageMap assigns the + * Page an id. A PageMap is roughly equivalent to a browser window and encapsulates a set of pages + * accessible through that window. When a popup window is created, a new PageMap is created for the + * popup. * - * <li><b>Identity </b>- The Session that a Page is contained in can be - * retrieved by calling Page.getSession(). Page identifiers start at 0 for each - * PageMap in the Session and increment as new pages are added to the map. The - * PageMap-(and Session)-unique identifier assigned to a given Page can be - * retrieved by calling getId(). So, the first Page added to a new user Session - * will always be named "0". + * <li><b>Identity </b>- The Session that a Page is contained in can be retrieved by calling + * Page.getSession(). Page identifiers start at 0 for each PageMap in the Session and increment as + * new pages are added to the map. The PageMap-(and Session)-unique identifier assigned to a given + * Page can be retrieved by calling getId(). So, the first Page added to a new user Session will + * always be named "0". * - * <li><b>LifeCycle </b>- Subclasses of Page which are interested in lifecycle - * events can override onBeginRequest, onEndRequest() and onModelChanged(). The - * onBeginRequest() method is inherited from Component. A call to - * onBeginRequest() is made for every Component on a Page before page rendering - * begins. At the end of a request (when rendering has completed) to a Page, the + * <li><b>LifeCycle </b>- Subclasses of Page which are interested in lifecycle events can override + * onBeginRequest, onEndRequest() and onModelChanged(). The onBeginRequest() method is inherited + * from Component. A call to onBeginRequest() is made for every Component on a Page before page + * rendering begins. At the end of a request (when rendering has completed) to a Page, the * onEndRequest() method is called for every Component on the Page. * - * <li><b>Nested Component Hierarchy </b>- The Page class is a subclass of - * MarkupContainer. All MarkupContainers can have "associated markup", which - * resides alongside the Java code by default. All MarkupContainers are also - * Component containers. Through nesting, of containers, a Page can contain any - * arbitrary tree of Components. For more details on MarkupContainers, see + * <li><b>Nested Component Hierarchy </b>- The Page class is a subclass of MarkupContainer. All + * MarkupContainers can have "associated markup", which resides alongside the Java code by default. + * All MarkupContainers are also Component containers. Through nesting, of containers, a Page can + * contain any arbitrary tree of Components. For more details on MarkupContainers, see * [EMAIL PROTECTED] org.apache.wicket.MarkupContainer}. * - * <li><b>Bookmarkable Pages </b>- Pages can be constructed with any - * constructor when they are being used in a Wicket session, but if you wish to - * link to a Page using a URL that is "bookmarkable" (which implies that the URL - * will not have any session information encoded in it, and that you can call - * this page directly without having a session first directly from your - * browser), you need to implement your Page with a no-arg constructor or with a - * constructor that accepts a PageParameters argument (which wraps any query - * string parameters for a request). In case the page has both constructors, the - * constructor with PageParameters will be used. + * <li><b>Bookmarkable Pages </b>- Pages can be constructed with any constructor when they are + * being used in a Wicket session, but if you wish to link to a Page using a URL that is + * "bookmarkable" (which implies that the URL will not have any session information encoded in it, + * and that you can call this page directly without having a session first directly from your + * browser), you need to implement your Page with a no-arg constructor or with a constructor that + * accepts a PageParameters argument (which wraps any query string parameters for a request). In + * case the page has both constructors, the constructor with PageParameters will be used. * - * <li><b>Models </b>- Pages, like other Components, can have models (see - * [EMAIL PROTECTED] IModel}). A Page can be assigned a model by passing one to the Page's - * constructor, by overriding initModel() or with an explicit invocation of - * setModel(). If the model is a - * [EMAIL PROTECTED] org.apache.wicket.model.CompoundPropertyModel}, Components on the - * Page can use the Page's model implicitly via container inheritance. If a - * Component is not assigned a model, the initModel() override in Component will - * cause that Component to use the nearest CompoundModel in the parent chain, in - * this case, the Page's model. For basic CompoundModels, the name of the - * Component determines which property of the implicit page model the component - * is bound to. If more control is desired over the binding of Components to the - * page model (for example, if you want to specify some property expression - * other than the component's name for retrieving the model object), - * BoundCompoundPropertyModel can be used. + * <li><b>Models </b>- Pages, like other Components, can have models (see [EMAIL PROTECTED] IModel}). A Page + * can be assigned a model by passing one to the Page's constructor, by overriding initModel() or + * with an explicit invocation of setModel(). If the model is a + * [EMAIL PROTECTED] org.apache.wicket.model.CompoundPropertyModel}, Components on the Page can use the Page's + * model implicitly via container inheritance. If a Component is not assigned a model, the + * initModel() override in Component will cause that Component to use the nearest CompoundModel in + * the parent chain, in this case, the Page's model. For basic CompoundModels, the name of the + * Component determines which property of the implicit page model the component is bound to. If more + * control is desired over the binding of Components to the page model (for example, if you want to + * specify some property expression other than the component's name for retrieving the model + * object), BoundCompoundPropertyModel can be used. * - * <li><b>Back Button </b>- Pages can support the back button by enabling - * versioning with a call to setVersioned(boolean). If a Page is versioned and - * changes occur to it which need to be tracked, a verison manager will be - * installed using the overridable factory method newVersionManager(). The - * default version manager returned by the base implementation of this method is - * an instance of UndoPageVersionManager, which manages versions of a page by - * keeping change records that can be reversed at a later time. + * <li><b>Back Button </b>- Pages can support the back button by enabling versioning with a call to + * setVersioned(boolean). If a Page is versioned and changes occur to it which need to be tracked, a + * verison manager will be installed using the overridable factory method newVersionManager(). The + * default version manager returned by the base implementation of this method is an instance of + * UndoPageVersionManager, which manages versions of a page by keeping change records that can be + * reversed at a later time. * * <li><b>Security </b>- See [EMAIL PROTECTED] IAuthorizationStrategy}, * [EMAIL PROTECTED] SimplePageAuthorizationStrategy} @@ -135,11 +123,9 @@ public abstract class Page extends MarkupContainer implements IRedirectListener, IPageMapEntry { /** - * You can set implementation of the interface in the - * [EMAIL PROTECTED] Page#serializer} then that implementation will handle the - * serialization of this page. The serializePage method is called from the - * writeObject method then the implementation override the default - * serialization. + * You can set implementation of the interface in the [EMAIL PROTECTED] Page#serializer} then that + * implementation will handle the serialization of this page. The serializePage method is called + * from the writeObject method then the implementation override the default serialization. * * @author jcompagner */ @@ -175,15 +161,14 @@ } /** - * When passed to [EMAIL PROTECTED] Page#getVersion(int)} the latest page version is - * returned. + * When passed to [EMAIL PROTECTED] Page#getVersion(int)} the latest page version is returned. */ public static final int LATEST_VERSION = -1; /** - * This is a thread local that is used for serializing page references in - * this page.It stores a [EMAIL PROTECTED] IPageSerializer} which can be set by the - * outside world to do the serialization of this page. + * This is a thread local that is used for serializing page references in this page.It stores a + * [EMAIL PROTECTED] IPageSerializer} which can be set by the outside world to do the serialization of this + * page. */ public static final ThreadLocal serializer = new ThreadLocal(); @@ -225,8 +210,8 @@ private transient Set renderedComponents; /** - * Boolean if the page is stateless, so it doesn't have to be in the page - * map, will be set in urlFor + * Boolean if the page is stateless, so it doesn't have to be in the page map, will be set in + * urlFor */ private transient Boolean stateless = null; @@ -304,10 +289,9 @@ } /** - * Called right after a component's listener method (the provided method - * argument) was called. This method may be used to clean up dependencies, - * do logging, etc. NOTE: this method will also be called when - * [EMAIL PROTECTED] WebPage#beforeCallComponent(Component, RequestListenerInterface)} + * Called right after a component's listener method (the provided method argument) was called. + * This method may be used to clean up dependencies, do logging, etc. NOTE: this method will + * also be called when [EMAIL PROTECTED] WebPage#beforeCallComponent(Component, RequestListenerInterface)} * or the method invocation itself failed. * * @param component @@ -325,12 +309,11 @@ } /** - * Called just before a component's listener method (the provided method - * argument) is called. This method may be used to set up dependencies, - * enforce authorization, etc. NOTE: if this method fails, the method will - * not be excuted. Method - * [EMAIL PROTECTED] WebPage#afterCallComponent(Component, RequestListenerInterface)} - * will always be called. + * Called just before a component's listener method (the provided method argument) is called. + * This method may be used to set up dependencies, enforce authorization, etc. NOTE: if this + * method fails, the method will not be excuted. Method + * [EMAIL PROTECTED] WebPage#afterCallComponent(Component, RequestListenerInterface)} will always be + * called. * * @param component * the component that is to be called @@ -412,8 +395,8 @@ /** * THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT CALL. * - * This method is called when a component was rendered standalone. If it is - * a markupcontainer then the rendering for that container is checked. + * This method is called when a component was rendered standalone. If it is a markupcontainer + * then the rendering for that container is checked. * * @param component * @@ -462,10 +445,9 @@ } /** - * @return The current version number of this page. If the page has been - * changed once, the return value will be 1. If the page has not yet - * been revised, the version returned will be 0, indicating that the - * page is still in its original state. + * @return The current version number of this page. If the page has been changed once, the + * return value will be 1. If the page has not yet been revised, the version returned + * will be 0, indicating that the page is still in its original state. */ public final int getCurrentVersionNumber() { @@ -511,10 +493,9 @@ } /** - * @return Get a page map entry for this page. By default, this is the page - * itself. But if you know of some way to compress the state for the - * page, you can return a custom implementation that produces the - * page on-the-fly. + * @return Get a page map entry for this page. By default, this is the page itself. But if you + * know of some way to compress the state for the page, you can return a custom + * implementation that produces the page on-the-fly. */ public IPageMapEntry getPageMapEntry() { @@ -539,9 +520,9 @@ } /** - * Returns whether the page should try to be stateless. To be stateless, - * getStatelessHint() of every component on page (and it's behavior) must - * return true and the page must be bookmarkable. + * Returns whether the page should try to be stateless. To be stateless, getStatelessHint() of + * every component on page (and it's behavior) must return true and the page must be + * bookmarkable. * * @see org.apache.wicket.Component#getStatelessHint() */ @@ -551,14 +532,13 @@ } /** - * Override this method to implement a custom way of producing a version of - * a Page when it cannot be found in the Session. + * Override this method to implement a custom way of producing a version of a Page when it + * cannot be found in the Session. * * @param versionNumber * The version desired - * @return A Page object with the component/model hierarchy that was - * attached to this page at the time represented by the requested - * version. + * @return A Page object with the component/model hierarchy that was attached to this page at + * the time represented by the requested version. */ public Page getVersion(final int versionNumber) { @@ -650,14 +630,13 @@ } /** - * Call this method when the current (ajax) request shouldn't merge the - * changes that are happening to the page with the previous version. + * Call this method when the current (ajax) request shouldn't merge the changes that are + * happening to the page with the previous version. * - * This is for example needed when you want to redirect to this page in an - * ajax request and then you do want to version normally.. + * This is for example needed when you want to redirect to this page in an ajax request and then + * you do want to version normally.. * - * This method doesn't do anything if the getRequest().mergeVersion doesn't - * return true. + * This method doesn't do anything if the getRequest().mergeVersion doesn't return true. */ public final void ignoreVersionMerge() { @@ -714,12 +693,10 @@ } /** - * Override this method and return true if your page is used to display - * Wicket errors. This can help the framework prevent infinite failure - * loops. + * Override this method and return true if your page is used to display Wicket errors. This can + * help the framework prevent infinite failure loops. * - * @return True if this page is intended to display an error to the end - * user. + * @return True if this page is intended to display an error to the end user. */ public boolean isErrorPage() { @@ -727,10 +704,9 @@ } /** - * Gets whether the page is stateless. Components on stateless page must not - * render any statefull urls, and components on statefull page must not - * render any stateless urls. Statefull urls are urls, which refer to a - * certain (current) page instance. + * Gets whether the page is stateless. Components on stateless page must not render any + * statefull urls, and components on statefull page must not render any stateless urls. + * Statefull urls are urls, which refer to a certain (current) page instance. * * @return Whether to page is stateless */ @@ -791,16 +767,16 @@ } /** - * Convenience method. Search for children of type fromClass and invoke - * their respective removePersistedFormData() methods. + * Convenience method. Search for children of type fromClass and invoke their respective + * removePersistedFormData() methods. * * @see Form#removePersistentFormComponentValues(boolean) * * @param formClass * Form to be selected. Pages may have more than one Form. * @param disablePersistence - * if true, disable persistence for all FormComponents on that - * page. If false, it will remain unchanged. + * if true, disable persistence for all FormComponents on that page. If false, it + * will remain unchanged. */ public final void removePersistedFormData(final Class formClass, final boolean disablePersistence) @@ -858,23 +834,6 @@ // Set form component values from cookies setFormComponentValuesFromCookies(); - // First, give priority to IFeedback instances, as they have to - // collect their messages before components like ListViews - // remove any child components - visitChildren(IFeedback.class, new IVisitor() - { - public Object component(Component component) - { - ((IFeedback)component).updateFeedback(); - return IVisitor.CONTINUE_TRAVERSAL; - } - }); - - if (this instanceof IFeedback) - { - ((IFeedback)this).updateFeedback(); - } - try { prepareForRender(); @@ -953,8 +912,8 @@ } /** - * This returns a page instance that is rollbacked the number of versions - * that is specified compared to the current page. + * This returns a page instance that is rollbacked the number of versions that is specified + * compared to the current page. * * This is a rollback including ajax versions. * @@ -972,9 +931,8 @@ /** * THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT CALL. * - * Set the id for this Page. This method is called by PageMap when a Page is - * added because the id, which is assigned by PageMap, is not known until - * this time. + * Set the id for this Page. This method is called by PageMap when a Page is added because the + * id, which is assigned by PageMap, is not known until this time. * * @param id * The id @@ -985,9 +943,9 @@ } /** - * Sets whether the page should try to be stateless. To be stateless, - * getStatelessHint() of every component on page (and it's behavior) must - * return true and the page must be bookmarkable. + * Sets whether the page should try to be stateless. To be stateless, getStatelessHint() of + * every component on page (and it's behavior) must return true and the page must be + * bookmarkable. * * @param value * whether the page should try to be stateless @@ -1040,8 +998,8 @@ * Throw an exception if not all components rendered. * * @param renderedContainer - * The page itself if it was a full page render or the container - * that was rendered standalone + * The page itself if it was a full page render or the container that was rendered + * standalone */ private final void checkRendering(final MarkupContainer renderedContainer) { @@ -1125,8 +1083,7 @@ } /** - * THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT CALL OR - * OVERRIDE. + * THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT CALL OR OVERRIDE. * */ private final void endVersion() @@ -1306,21 +1263,18 @@ } /** - * Set-up response with appropriate content type, locale and encoding. The - * locale is set equal to the session's locale. The content type header - * contains information about the markup type (@see #getMarkupType()) and - * the encoding. The response (and request) encoding is determined by an - * application setting (@see - * ApplicationSettings#getResponseRequestEncoding()). In addition, if the - * page's markup contains a xml declaration like <?xml ... ?> an xml - * declaration with proper encoding information is written to the output as - * well, provided it is not disabled by an applicaton setting (@see + * Set-up response with appropriate content type, locale and encoding. The locale is set equal + * to the session's locale. The content type header contains information about the markup type + * (@see #getMarkupType()) and the encoding. The response (and request) encoding is determined + * by an application setting (@see ApplicationSettings#getResponseRequestEncoding()). In + * addition, if the page's markup contains a xml declaration like <?xml ... ?> an xml + * declaration with proper encoding information is written to the output as well, provided it is + * not disabled by an applicaton setting (@see * ApplicationSettings#getStripXmlDeclarationFromOutput()). * <p> - * Note: Prior to Wicket 1.1 the output encoding was determined by the - * page's markup encoding. Because this caused uncertainties about the - * /request/ encoding, it has been changed in favour of the new, much safer, - * approach. Please see the Wiki for more details. + * Note: Prior to Wicket 1.1 the output encoding was determined by the page's markup encoding. + * Because this caused uncertainties about the /request/ encoding, it has been changed in favour + * of the new, much safer, approach. Please see the Wiki for more details. */ protected void configureResponse() { @@ -1350,8 +1304,7 @@ } /** - * THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT CALL OR - * OVERRIDE. + * THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT CALL OR OVERRIDE. * * @see org.apache.wicket.Component#internalOnModelChanged() */ @@ -1372,8 +1325,7 @@ } /** - * THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT CALL OR - * OVERRIDE. + * THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT CALL OR OVERRIDE. * * @param map */ @@ -1507,8 +1459,8 @@ /** * @param pageMap - * Sets this page into the page map with the given name. If the - * page map does not yet exist, it is automatically created. + * Sets this page into the page map with the given name. If the page map does not yet + * exist, it is automatically created. */ final void setPageMap(final IPageMap pageMap) { Modified: wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java URL: http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java?rev=571837&r1=571836&r2=571837&view=diff ============================================================================== --- wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java (original) +++ wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java Sat Sep 1 10:42:51 2007 @@ -584,34 +584,6 @@ // process feedback - // TODO do we need these special pre-attach feedback traversals all over - // the place? - it = markupIdToComponent.values().iterator(); - while (it.hasNext()) - { - final Component component = (Component)it.next(); - - if (component instanceof MarkupContainer) - { - MarkupContainer container = (MarkupContainer)component; - - // collect feedback - container.visitChildren(IFeedback.class, new IVisitor() - { - public Object component(Component component) - { - ((IFeedback)component).updateFeedback(); - return IVisitor.CONTINUE_TRAVERSAL; - } - }); - } - - if (component instanceof IFeedback) - { - ((IFeedback)component).updateFeedback(); - } - } - // we need to attach feedback components here because they are not // attached in MarkupContainer#attachChildren() it = markupIdToComponent.values().iterator(); Modified: wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/feedback/FeedbackMessagesModel.java URL: http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/feedback/FeedbackMessagesModel.java?rev=571837&r1=571836&r2=571837&view=diff ============================================================================== --- wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/feedback/FeedbackMessagesModel.java (original) +++ wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/feedback/FeedbackMessagesModel.java Sat Sep 1 10:42:51 2007 @@ -49,9 +49,8 @@ * Constructor. Creates a model for all feedback messages on the page. * * @param component - * The component where the page will be get from for which - * messages will be displayed usually the same page as the one - * feedbackpanel is attached to + * The component where the page will be get from for which messages will be displayed + * usually the same page as the one feedbackpanel is attached to */ public FeedbackMessagesModel(Component component) { @@ -62,14 +61,13 @@ } /** - * Constructor. Creates a model for all feedback messags accepted by the - * given filter. + * Constructor. Creates a model for all feedback messags accepted by the given filter. * * @param filter * The filter to apply * @param page - * Page for which messages will be displayed - usually the same - * page as the one feedbackpanel is attached to + * Page for which messages will be displayed - usually the same page as the one + * feedbackpanel is attached to * */ public FeedbackMessagesModel(Page page, IFeedbackMessageFilter filter) @@ -152,8 +150,7 @@ * Override this method to post process to the FeedbackMessage list. * * @param messages - * List of sorted and filtered FeedbackMessages for further - * processing + * List of sorted and filtered FeedbackMessages for further processing * @return The processed FeedbackMessage list */ protected List processMessages(final List messages) Modified: wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/feedback/IFeedback.java URL: http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/feedback/IFeedback.java?rev=571837&r1=571836&r2=571837&view=diff ============================================================================== --- wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/feedback/IFeedback.java (original) +++ wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/feedback/IFeedback.java Sat Sep 1 10:42:51 2007 @@ -17,18 +17,15 @@ package org.apache.wicket.feedback; /** - * Interface for components that present some kind of feedback to the user, - * normally based on the feedback messages attached to various components on a - * given page. + * Interface for components that present some kind of feedback to the user, normally based on the + * feedback messages attached to various components on a given page. + * + * This is basically a marker interface that tells Wicket that this component's onBeforeRender + * method must be called after all non feedback components have been initialized. * * @author Jonathan Locke * @author Eelco Hillenius */ public interface IFeedback { - /** - * This method is called on any component implementing IFeedback when it is - * time for the component to update its feedback display - */ - void updateFeedback(); } Modified: wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/panel/FeedbackPanel.java URL: http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/panel/FeedbackPanel.java?rev=571837&r1=571836&r2=571837&view=diff ============================================================================== --- wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/panel/FeedbackPanel.java (original) +++ wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/panel/FeedbackPanel.java Sat Sep 1 10:42:51 2007 @@ -36,9 +36,8 @@ /** - * A panel that displays [EMAIL PROTECTED] org.apache.wicket.feedback.FeedbackMessage}s in - * a list view. The maximum number of messages to show can be set with - * setMaxMessages(). + * A panel that displays [EMAIL PROTECTED] org.apache.wicket.feedback.FeedbackMessage}s in a list view. The + * maximum number of messages to show can be set with setMaxMessages(). * * @see org.apache.wicket.feedback.FeedbackMessage * @see org.apache.wicket.feedback.FeedbackMessages @@ -75,9 +74,8 @@ private static final long serialVersionUID = 1L; /** - * Returns feedbackPanel + the message level, eg - * 'feedbackPanelERROR'. This is used as the class of the li / - * span elements. + * Returns feedbackPanel + the message level, eg 'feedbackPanelERROR'. This is used + * as the class of the li / span elements. * * @see org.apache.wicket.model.IModel#getObject() */ @@ -110,6 +108,9 @@ /** * @see org.apache.wicket.Component#Component(String) + * + * @param id + * @param filter */ public FeedbackPanel(final String id, IFeedbackMessageFilter filter) { @@ -124,7 +125,7 @@ } }; add(messagesContainer); - this.messageListView = new MessageListView("messages"); + messageListView = new MessageListView("messages"); messageListView.setVersioned(false); messagesContainer.add(messageListView); @@ -136,9 +137,8 @@ /** - * Search messages that this panel will render, and see if there is any - * message of level ERROR or up. This is a convenience method; same as - * calling 'anyMessage(FeedbackMessage.ERROR)'. + * Search messages that this panel will render, and see if there is any message of level ERROR + * or up. This is a convenience method; same as calling 'anyMessage(FeedbackMessage.ERROR)'. * * @return whether there is any message for this panel of level ERROR or up */ @@ -148,8 +148,7 @@ } /** - * Search messages that this panel will render, and see if there is any - * message. + * Search messages that this panel will render, and see if there is any message. * * @return whether there is any message for this panel */ @@ -159,8 +158,8 @@ } /** - * Search messages that this panel will render, and see if there is any - * message of the given level. + * Search messages that this panel will render, and see if there is any message of the given + * level. * * @param level * the level, see FeedbackMessage @@ -195,8 +194,7 @@ } /** - * @return Model for feedback messages on which you can install filters and - * other properties + * @return Model for feedback messages on which you can install filters and other properties */ public final FeedbackMessagesModel getFeedbackMessagesModel() { @@ -253,12 +251,12 @@ /** * @param maxMessages - * The maximum number of feedback messages that this feedback - * panel should show at one time + * The maximum number of feedback messages that this feedback panel should show at + * one time */ public final void setMaxMessages(int maxMessages) { - this.messageListView.setViewSize(maxMessages); + messageListView.setViewSize(maxMessages); } /** @@ -278,7 +276,7 @@ public void updateFeedback() { // Force model to load - messageListView.getModelObject(); + // getFeedbackMessagesModel().preloadMessages(); } /** @@ -286,9 +284,8 @@ * * @param message * the message - * @return the css class; by default, this returns feedbackPanel + the - * message level, eg 'feedbackPanelERROR', but you can override this - * method to provide your own + * @return the css class; by default, this returns feedbackPanel + the message level, eg + * 'feedbackPanelERROR', but you can override this method to provide your own */ protected String getCSSClass(final FeedbackMessage message) { @@ -317,9 +314,8 @@ } /** - * Generates a component that is used to display the message inside the - * feedback panel. This component must handle being attached to - * <code>span</code> tags. + * Generates a component that is used to display the message inside the feedback panel. This + * component must handle being attached to <code>span</code> tags. * * By default a [EMAIL PROTECTED] Label} is used. * Modified: wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/component/ComponentRequestTarget.java URL: http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/component/ComponentRequestTarget.java?rev=571837&r1=571836&r2=571837&view=diff ============================================================================== --- wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/component/ComponentRequestTarget.java (original) +++ wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/component/ComponentRequestTarget.java Sat Sep 1 10:42:51 2007 @@ -17,15 +17,13 @@ package org.apache.wicket.request.target.component; import org.apache.wicket.Component; -import org.apache.wicket.MarkupContainer; import org.apache.wicket.Page; import org.apache.wicket.RequestCycle; -import org.apache.wicket.Component.IVisitor; -import org.apache.wicket.feedback.IFeedback; /** - * Default implementation of [EMAIL PROTECTED] org.apache.wicket.request.target.component.IComponentRequestTarget}. - * Target that denotes a single component instance. + * Default implementation of + * [EMAIL PROTECTED] org.apache.wicket.request.target.component.IComponentRequestTarget}. Target that denotes + * a single component instance. * * @author Eelco Hillenius */ @@ -73,26 +71,6 @@ // Render the component try { - // collect feedback - if (component instanceof MarkupContainer) - { - MarkupContainer container = (MarkupContainer)component; - - container.visitChildren(IFeedback.class, new IVisitor() - { - public Object component(Component component) - { - ((IFeedback)component).updateFeedback(); - return IVisitor.CONTINUE_TRAVERSAL; - } - }); - } - - if (component instanceof IFeedback) - { - ((IFeedback)component).updateFeedback(); - } - // attach component.attach();