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]