> Since others seem to need it, this might be worth refining over on > wicket-stuff.
I think it's worth to build a universal bookmarkable tabbed panel. Brill, please post your solution so we can look what is better in your or in my solution and built the ultimative BookmarkableTabbedPanel. I refined my first version a bit and added the following features: * Reliable handling of user input (tab number). * Possibility to mix bookmarkable and stateful links. * Parameter name to distinguish tabs is now the component id by default. This will avoid conflicts with multiple BookmarkableTabbedPanels. But I'm not sure if mixing bookmarkable and stateful links is a good idea. Current version: ----------------------------------------------------------------------------------------------------------- package com.helmbold.wicket.components; import java.util.ArrayList; import java.util.List; import org.apache.wicket.PageParameters; import org.apache.wicket.extensions.markup.html.tabs.ITab; import org.apache.wicket.extensions.markup.html.tabs.TabbedPanel; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.link..BookmarkablePageLink; public class BookmarkableTabbedPanel extends TabbedPanel { private PageParameters pageParameters; private String tabParameterName; private int defaultTabIndex = 0; private List unbookmarkableTabIndex = new ArrayList(); /** * Using this constructor the following defaults take effect: * <ul> * <li>tabParameterName = component id</li> * <li>defaultTabIndex = 0</li> * </ul> * @param id component id * @param tabs list of ITab objects used to represent tabs * @param pageParameters Container for parameters to a requested page. A * parameter for the selected tab will be inserted. */ public BookmarkableTabbedPanel( String id, List<ITab> tabs, PageParameters pageParameters) { super(id, tabs); this.pageParameters = pageParameters; this.tabParameterName = id; if (pageParameters.containsKey(tabParameterName)) { String tab = pageParameters.getString(tabParameterName); try { setSelectedTab(Integer.parseInt(tab)); } catch (NumberFormatException e) { setSelectedTab(defaultTabIndex); } } else setSelectedTab(defaultTabIndex); } /** * @param id component id * @param tabs list of ITab objects used to represent tabs * @param defaultTabIndex Set the tab to by displayed by default. The url * for this tab will not contain any tab specific information. If you want to * display the first tab by default, you can use the constructor without this * parameter. * @param pageParameters Container for parameters to a requested page. A * parameter for the selected tab will be inserted. */ public BookmarkableTabbedPanel( String id, List<ITab> tabs, int defaultTabIndex, String tabParameterName, PageParameters pageParameters, int ...unbookmarkableTabIndex) { this(id, tabs, pageParameters); this.defaultTabIndex = defaultTabIndex; setSelectedTab(defaultTabIndex); this.tabParameterName = tabParameterName; for(int element : unbookmarkableTabIndex) this.unbookmarkableTabIndex.add(element); } @Override protected WebMarkupContainer newLink(String linkId, int index) { WebMarkupContainer link; // create default (not bookmarkable) links for the specified tabs. if (unbookmarkableTabIndex.contains(index)) link = super.newLink(linkId, index); // create bookmarkable links else { if (index == defaultTabIndex) pageParameters.remove(tabParameterName); else pageParameters.put(tabParameterName, "" + index); link = new BookmarkablePageLink( linkId, getPage().getClass(), pageParameters); } if (index == getSelectedTab()) link.setEnabled(false); return link; } } ----------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org