You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by Seven Corners <sh...@blackwave.tv> on 2009/02/11 20:45:20 UTC

LinkTree with BookmarkablePageLinks

I have a LinkTree with BookmarkablePageLinks, wherein the nodes correspond to
different types of objects.  The models within the nodes tell me what kind
of page I need to instantiate, with what parameters.  I had some troubles
implementing it, but I got it working.  Since this kind of pattern is common
within UIs and I have been helped on other occasions by people here, I'm
posting what I figured out in order to give back to the community.

public class MyLinkTree extends LinkTree
{
    public MyLinkTree(String id, TreeModel model)
    {
        super(id, model);
        setLinkType(
org.apache.wicket.markup.html.tree.BaseTree.LinkType.REGULAR );
    }
    	
    @Override
    protected Component newNodeComponent( String id, IModel model )
    {
        return new LinkIconPanel( id, model, MyLinkTree.this )
        {
            private static final long serialVersionUID = 1L;
        
            @Override
            protected void addComponents( final IModel model, final BaseTree
tree )
            {
                final Object obj = ( ( DefaultMutableTreeNode
)model.getObject() ).getUserObject(); 

                BaseTree.ILinkCallback callback = new
BaseTree.ILinkCallback() 
                { 
                		private static final long serialVersionUID = 1L;

	                	public void onClick( AjaxRequestTarget target ) 
	                	{ 
                        PageParameters params = new PageParameters(); 
                        if ( obj instanceof BeanA )
                        {
                           
target.appendJavascript("window.location="+MyLinkTree.this.urlFor(
PageA.class, params ) );
                        }
                        else if ( obj instanceof BeanB )
                        {
                            params.add( "myParamKey", "myParamVal" );
                           
target.appendJavascript("window.location="+MyLinkTree.this.urlFor(
PageB.class, params ) );
                        }
                    }
                };
                
                MarkupContainer iconContainer = tree.newLink( "iconLink",
callback ); 
                iconContainer.add(newImageComponent("icon", tree, model)); 
                add( iconContainer );
                	
            		PageParameters params = new PageParameters(); 
            		if ( obj instanceof BeanA )
            		{
            		    final BeanA myBean = ( BeanA )obj;
                		BookmarkablePageLink contentLink = new
BookmarkablePageLink( "contentLink", PageA.class, params );
                		contentLink.add( new Label( "content", myBean.toString() )
);
                		add( contentLink );
            		}
            		else if ( obj instanceof BeanB )
            		{
            		    final BeanB myBean = ( BeanB )obj;
            		    params.add( "myParamKey", "myParamVal" );
            		    BookmarkablePageLink contentLink = new
BookmarkablePageLink( "contentLink", PageB.class, params );
            		    add( contentLink );
            		}
            }
        };
    }
}
-- 
View this message in context: http://www.nabble.com/LinkTree-with-BookmarkablePageLinks-tp21962723p21962723.html
Sent from the Wicket - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org