Instead of competing, why don't we set up a project some place and
check both solutions in under different packages?
We can then refactor them into one and take the best of both :)
- Brill
On 10-Mar-09, at 8:27 AM, Christian Helmbold wrote:
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
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org