Allow me to hijack this topic because my eye sees the magic word
ISecureComponent :D

Glad to come across another user of Wasp and Swarm. Any comments /
questions about them?

Maurice

On 9/9/07, Igor Vaynberg <[EMAIL PROTECTED]> wrote:
> heh, seems a lot of people run into it. the short is that you have to do
> this:
>
> lets say you have a ref to the panel: private Panel panel;
>
> what you do is this:
> panel.replaceWith(new Panel());
>
> and then later again
> panel.replaceWith(new Panel());
>
> ^ the second time will fail beause you have removed panel from hierarchy
> already - you replaced it with another panel.
>
> the proper way to do it is to keep the reference up to date, so
> Panel temp=new Panel();
> panel.replaceWith(temp);
> panel=temp;
>
> that way when it happens the second time it will properly act on the new
> panel that is inside the hierarchy now.
>
> -igor
>
>
>
>
> On 9/9/07, Anthony Schexnaildre <[EMAIL PROTECTED]> wrote:
> >
> > I am trying to create a link that will replace one panel with another
> > on the page. This seems as though it should be an easy task but after
> > many attempts and searching the net for examples I have yet to get it
> > working so the replacement can happen more than one without the
> > component becoming orphaned. On the second replace attempt i get the
> > following exception. Anyone have the solution?
> >
> > Thank you,
> >
> > Anthony
> >
> >
> > java.lang.IllegalStateException: This method can only be called on a
> > component that has already been added to its parent.
> >       at org.apache.wicket.Component.replaceWith(Component.java:2266)
> >       at com.pinwise.pinbase.web.components.links.SecurePanelLink
> > $4.onClick(SecurePanelLink.java:142)
> >       at org.apache.wicket.markup.html.link.Link.onLinkClicked
> > (Link.java:222)
> >       at java.lang.reflect.Method.invoke(Method.java:585)
> >       at org.apache.wicket.RequestListenerInterface.invoke
> > (RequestListenerInterface.java:186)
> >
> >
> > =====================================
> >
> > =====================================
> >
> >         public UserPanel(String id) {
> >                 super(id);
> >
> >
> >                 UserFormPanel userFormPanel = new
> > UserFormPanel("userFormPanel");
> >                 add( userFormPanel );
> >
> >                 List<IColumn> columns = new ArrayList<IColumn>();
> >                 final Model m = new Model(userFormPanel);
> >          columns.add(new PropertyColumn(new Model("Actions"), "id")
> >          {
> >                         public void populateItem(Item cellItem, String
> > componentId, final
> > IModel model)
> >              {
> >                                 EditActionPanel panel = new
> > EditActionPanel(componentId, model);
> >                                 panel.add(
> > SecurePanelLink.createSecurePanelLink( "edit", m,
> > UserFormPanel.class, model ) );
> >                cellItem.add( panel );
> >              }
> >          });
> >
> >          columns.add(new PropertyColumn(new Model("Username"),
> > "username", "username"));
> >          columns.add(new PropertyColumn(new Model("First Name"),
> > "firstName", "firstName"));
> >          columns.add(new PropertyColumn(new Model("Last Name"),
> > "lastName", "lastName"));
> >
> >          add(new DefaultDataTable("table", columns, new
> > SortableUserDataProvider(), 10));
> >         }
> >
> >
> > ====================================
> > SecurePanelLink
> > ====================================
> > public class SecurePanelLink extends Link implements ISecureComponent {
> >
> >         /**
> >          *
> >          */
> >         private static final long serialVersionUID = 1L;
> >
> >         protected IPanelLink panelLink;
> >
> >         /**
> >          * @param id
> >          * @param c
> >          */
> >         public SecurePanelLink(String id, final Class c)
> >         {
> >                 super(id);
> >                 // Ensure that c is a subclass of Panel
> >                 if (!Panel.class.isAssignableFrom(c))
> >                 {
> >                         throw new IllegalArgumentException("Class " + c +
> > " is not a
> > subclass of Panel");
> >                 }
> >
> >                 this.panelLink = createIPanelLink( id, c );
> >                 setSecurityCheck(new LinkSecurityCheck(this, c));
> >         }
> >
> >         public SecurePanelLink(String id, final Class c, Model
> > existingPanel)
> >         {
> >                 super(id);
> >                 // Ensure that c is a subclass of Panel
> >                 if (!Panel.class.isAssignableFrom(c))
> >                 {
> >                         throw new IllegalArgumentException("Class " + c +
> > " is not a
> > subclass of Panel");
> >                 }
> >
> >                 this.panelLink = createIPanelLink( id, c );
> >                 setSecurityCheck(new LinkSecurityCheck(this, c));
> >         }
> >
> >         private IPanelLink createIPanelLink( String id, final Class c ) {
> >                 return new IPanelLink()
> >                 {
> >                         private static final long serialVersionUID = 1L;
> >
> >                         public Panel getPanel( String id )
> >                         {
> >                                 // Create panel using panel factory
> >                                 return getPanelFactory().newPanel(id, c );
> >                         }
> >
> >                         public Panel getPanel( String id, IModel model)
> >                         {
> >                                 // Create panel using panel factory
> >                                 return getPanelFactory().newPanel(id, c,
> > model);
> >                         }
> >
> >                         public Panel getPanel( Panel panel, IModel model)
> >                         {
> >                                 // Create panel using panel factory
> >                                 return getPanelFactory().newPanel(
> > panel.getId(), c, model);
> >                         }
> >
> >                         public Class getPanelIdentity()
> >                         {
> >                                 return c;
> >                         }
> >                 };
> >         }
> >
> >         /**
> >          *
> >          */
> >         public static SecurePanelLink createSecurePanelLink( String id,
> > Class clazz ) {
> >                 return new SecurePanelLink( id, clazz ) {
> >                         /**
> >                          *
> >                          */
> >                         private static final long serialVersionUID = 1L;
> >
> >                         public void onClick() {
> >                                 Panel panel = ((Panel)findParent(
> > Panel.class));
> >                                 panel.replaceWith( panelLink.getPanel(
> > panel.getId() ) );
> >                         }
> >                 };
> >         }
> >
> >         /**
> >          *
> >          */
> >         public static SecurePanelLink createSecurePanelLink( String id,
> > Class newPanel, final IModel model ) {
> >                 return new SecurePanelLink( id, newPanel ) {
> >                         /**
> >                          *
> >                          */
> >                         private static final long serialVersionUID = 1L;
> >
> >                         public void onClick() {
> >                                 Panel panel = ((Panel)findParent(
> > Panel.class));
> >                                 panel.replaceWith( panelLink.getPanel(
> > panel.getId(), model ) );
> >                         }
> >                 };
> >         }
> >
> >         /**
> >          *
> >          */
> >         public static SecurePanelLink createSecurePanelLink( String id,
> > final Model existingPanel, Class newPanel, final IModel model ) {
> >                 return new SecurePanelLink( id, newPanel, existingPanel )
> > {
> >                         /**
> >                          *
> >                          */
> >                         private static final long serialVersionUID = 1L;
> >
> >
> >                         public void onClick() {
> >                                 Panel p =
> > (Panel)existingPanel.getObject();
> >                                 Panel panel = panelLink.getPanel
> > ((Panel)existingPanel.getObject
> > (), model );
> >                                 panel.setOutputMarkupId(true);
> >                                 p.getParent().replace( panel );
> >                                 p=panel;
> >                         }
> >                 };
> >         }
> >
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to