Tabbed Panel with bookmarkable links

classic Classic list List threaded Threaded
19 messages Options
Reply | Threaded
Open this post in threaded view
|

Tabbed Panel with bookmarkable links

Christian Helmbold

Hello,

I've written a component which provides bookmarkable links for a tabbed panel. The link to the currend tab is disabled and the url to the default tab contains no tab information to keep URLs short.

It works so far, but since this is my first wicket component I'd like to know your suggestions to improve the code.

A possible improvement could be to replace the tab number by its name. So they would look like
http://some.url/app/PageX?tab=edit instead of
http://some.url/app/PageX?tab=1.
But to do this, it would be necessary to generate a map containing the tab names as keys and their indexes as values. This would be done on every request, because the tabbed panel is regenerated on every request. Is there a way to avoid the regeneration of the map? Maybe tab names in URLs are not really important, but I think a user would prefer a self-explanatory words in URLs.

I tried to use getPage().getPageParameters() in the constructor, but getPage() didn't work there. It works in the newLink(...) method. Why does it not work in the constructor?

Another question is: Is it a good idea to use this function within a component? If it is not a good idea, I have to add a page argument to the constructor instead of using getPage() in the newLink(...) method.

May this component be incompatible with other strategies than MixedParamUrlCodingStrategy? If this component is universal I'd like to contribute it to the wicket extensions sub project.


--------------------------------------------------------------------------------
package com.helmbold.wicket.components;

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 = "tab";
    private int defaultTabIndex = 0;


  /**
   * Using this constructor the following defaults take effect:
   * <ul>
   *    <li>tabParameterName = "tab"</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;
   
    if (pageParameters.containsKey(tabParameterName))
    {
      String tab = pageParameters.getString(tabParameterName);
      setSelectedTab(Integer.parseInt(tab));
    }
    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)
    {
        this(id, tabs, pageParameters);
        this.defaultTabIndex = defaultTabIndex;
        setSelectedTab(defaultTabIndex);
        this.tabParameterName = tabParameterName;
    }

   
    @Override
  protected WebMarkupContainer newLink(String linkId, int index)
  {
    if (index == defaultTabIndex)
      pageParameters.remove(tabParameterName);
    else
      pageParameters.put(tabParameterName, "" + index);    
     
    WebMarkupContainer link = new BookmarkablePageLink(
            linkId, getPage().getClass(), pageParameters);
    if (index == getSelectedTab())
      link.setEnabled(false);
    return link;
  }
 
}
--------------------------------------------------------------------------------

Regards,
Christian

 --
http://www.groovy-forum.de






---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: Tabbed Panel with bookmarkable links

Brill Pappin
Cool... I just did exactly the same thing!
Since others seem to need it, this might be worth refining over on  
wicket-stuff.

I did my version slightly different in that I used the existing one as  
a basis and created a PageTabbedPanel IPageTab and AbstractPageTab.
The main difference is in the newTabContainer() method (and of course  
the support in the IPageTab interface).

I actually have two levels of tabs however in this current app and I  
have not satisfactorily resolved the second layer of tabs (obviously  
if I use the same thing on the second level, the tabs for the first  
are going to vanish). I was thinking that for multi layer page based  
tabs you could nest them.

Anyway, let me know if your interested, or if any other Wicket guru's  
are interested...

- Brill


On 9-Mar-09, at 1:32 PM, Christian Helmbold wrote:

>
> Hello,
>
> I've written a component which provides bookmarkable links for a  
> tabbed panel. The link to the currend tab is disabled and the url to  
> the default tab contains no tab information to keep URLs short.
>
> It works so far, but since this is my first wicket component I'd  
> like to know your suggestions to improve the code.
>
> A possible improvement could be to replace the tab number by its  
> name. So they would look like
> http://some.url/app/PageX?tab=edit instead of
> http://some.url/app/PageX?tab=1.
> But to do this, it would be necessary to generate a map containing  
> the tab names as keys and their indexes as values. This would be  
> done on every request, because the tabbed panel is regenerated on  
> every request. Is there a way to avoid the regeneration of the map?  
> Maybe tab names in URLs are not really important, but I think a user  
> would prefer a self-explanatory words in URLs.
>
> I tried to use getPage().getPageParameters() in the constructor, but  
> getPage() didn't work there. It works in the newLink(...) method.  
> Why does it not work in the constructor?
>
> Another question is: Is it a good idea to use this function within a  
> component? If it is not a good idea, I have to add a page argument  
> to the constructor instead of using getPage() in the newLink(...)  
> method.
>
> May this component be incompatible with other strategies than  
> MixedParamUrlCodingStrategy? If this component is universal I'd like  
> to contribute it to the wicket extensions sub project.
>
>
> --------------------------------------------------------------------------------
> package com.helmbold.wicket.components;
>
> 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 = "tab";
>    private int defaultTabIndex = 0;
>
>
>  /**
>   * Using this constructor the following defaults take effect:
>   * <ul>
>   *    <li>tabParameterName = "tab"</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;
>
>    if (pageParameters.containsKey(tabParameterName))
>    {
>      String tab = pageParameters.getString(tabParameterName);
>      setSelectedTab(Integer.parseInt(tab));
>    }
>    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)
>    {
>        this(id, tabs, pageParameters);
>        this.defaultTabIndex = defaultTabIndex;
>        setSelectedTab(defaultTabIndex);
>        this.tabParameterName = tabParameterName;
>    }
>
>
>    @Override
>  protected WebMarkupContainer newLink(String linkId, int index)
>  {
>    if (index == defaultTabIndex)
>      pageParameters.remove(tabParameterName);
>    else
>      pageParameters.put(tabParameterName, "" + index);
>
>    WebMarkupContainer link = new BookmarkablePageLink(
>            linkId, getPage().getClass(), pageParameters);
>    if (index == getSelectedTab())
>      link.setEnabled(false);
>    return link;
>  }
>
> }
> --------------------------------------------------------------------------------
>
> Regards,
> Christian
>
> --
> http://www.groovy-forum.de
>
>
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [hidden email]
> For additional commands, e-mail: [hidden email]
>


---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

AW: Tabbed Panel with bookmarkable links

Christian Helmbold

> 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: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: Tabbed Panel with bookmarkable links

James Carman-3
What if you use two different tabbed panels on the same page?

On Tue, Mar 10, 2009 at 8:27 AM, Christian Helmbold
<[hidden email]> 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: [hidden email]
> For additional commands, e-mail: [hidden email]
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

AW: Tabbed Panel with bookmarkable links

Christian Helmbold

> What if you use two different tabbed panels on the same page?

Good point! It doesn't work with two panels on the same page! I don't know why and how to fix it.


WicketMessage: Error attaching this container for rendering: [Page class = com.helmbold.wicki.view.ArticlePage, id = 2, version = 0]
Root cause:
java.lang.ArrayIndexOutOfBoundsException: 0
     at org.apache.wicket.extensions.markup.html.tabs.TabbedPanel.isTabVisible(TabbedPanel.java:397)
     at org.apache.wicket.extensions.markup.html.tabs.TabbedPanel.onBeforeRender(TabbedPanel.java:219)
     at org.apache.wicket.Component.internalBeforeRender(Component.java:1049)
     at org.apache.wicket.Component.beforeRender(Component.java:1083)
     at org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1716)
     at org.apache.wicket.Component.onBeforeRender(Component.java:3837)
     at org.apache.wicket.Page.onBeforeRender(Page.java:1478)
     at org.apache.wicket.Component.internalBeforeRender(Component.java:1049)
     at org.apache.wicket.Component.beforeRender(Component.java:1083)
     at org.apache.wicket.Component.prepareForRender(Component.java:2216)
     at org.apache.wicket.Component.prepareForRender(Component.java:2243)
     at org.apache.wicket.Page.renderPage(Page.java:905)
     at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.respond(BookmarkablePageRequestTarget.java:262)
     at org.apache.wicket.request.AbstractRequestCycleProcessor.respond(AbstractRequestCycleProcessor.java:105)
     at org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1200)
     at org.apache.wicket.RequestCycle.step(RequestCycle.java:1271)
     at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1370)
     at org.apache.wicket.RequestCycle.request(RequestCycle.java:501)
     at org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:455)
     at org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:288)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
     at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
     at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
     at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
     at java.lang.Thread.run(Thread.java:619)
Complete stack:
org.apache.wicket.WicketRuntimeException: Error attaching this container for rendering: [Page class = com.helmbold.wicki.view.ArticlePage, id = 2, version = 0]
     at org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1728)
     at org.apache.wicket.Component.onBeforeRender(Component.java:3837)
     at org.apache.wicket.Page.onBeforeRender(Page.java:1478)
     at org.apache.wicket.Component.internalBeforeRender(Component.java:1049)
     at org.apache.wicket.Component.beforeRender(Component.java:1083)
     at org.apache.wicket.Component.prepareForRender(Component.java:2216)
     at org.apache.wicket.Component.prepareForRender(Component.java:2243)
     at org.apache.wicket.Page.renderPage(Page.java:905)
     at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.respond(BookmarkablePageRequestTarget.java:262)
     at org.apache.wicket.request.AbstractRequestCycleProcessor.respond(AbstractRequestCycleProcessor.java:105)
     at org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1200)
     at org.apache.wicket.RequestCycle.step(RequestCycle.java:1271)
     at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1370)
     at org.apache.wicket.RequestCycle.request(RequestCycle.java:501)


Regards
Christian






---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

AW: AW: Tabbed Panel with bookmarkable links

Christian Helmbold

> > What if you use two different tabbed panels on the same page?

>
> Good point! It doesn't work with two panels on the same page! I don't know why
> and how to fix it.

It was a mistake in my test code, that lead to this error. I accidentally added the tabs of my second tabbed panel to the first one. Multiple BookmarkableTabbedPanels work fine now.

Regards
Christian






---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: AW: Tabbed Panel with bookmarkable links

Brill Pappin
In reply to this post by Christian Helmbold
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: [hidden email]
> For additional commands, e-mail: [hidden email]
>


---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: Tabbed Panel with bookmarkable links

Brill Pappin
In reply to this post by James Carman-3
That is exactly the problem I *do* have :)
Have not resolved it yet, but I was thinking or allowing them to be  
nested to its actually one tab panel, but with multiple levels.

- Brill

On 10-Mar-09, at 8:41 AM, James Carman wrote:

> What if you use two different tabbed panels on the same page?
>
> On Tue, Mar 10, 2009 at 8:27 AM, Christian Helmbold
> <[hidden email]> 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: [hidden email]
>> For additional commands, e-mail: [hidden email]
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [hidden email]
> For additional commands, e-mail: [hidden email]
>


---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

AW: AW: Tabbed Panel with bookmarkable links

Christian Helmbold
In reply to this post by Brill Pappin

> 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 :)

I agree. Is there an existing place in the wicket project to do this?

I've discovered some troubles in my solution when multiple tabbed panes are used in one page. The state of other panels is not hold correctly in the URLs and so the tabbed panels influence each other.





---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: Tabbed Panel with bookmarkable links

James Carman-3
In reply to this post by Brill Pappin
It may not be worth it.  Having multiple tabbed panels on the same
page may not be a very common usecase.  Perhaps it's better to settle
for YAGNI in this case and if it really does comes up and someone
wants to solve the issue, then address it then.  But, for now, a good
Javadoc warning might suffice.  It might not be worth cluttering up
the code (no idea what it'd take to fix).

On Tue, Mar 10, 2009 at 11:14 AM, Brill Pappin <[hidden email]> wrote:

> That is exactly the problem I *do* have :)
> Have not resolved it yet, but I was thinking or allowing them to be nested
> to its actually one tab panel, but with multiple levels.
>
> - Brill
>
> On 10-Mar-09, at 8:41 AM, James Carman wrote:
>
>> What if you use two different tabbed panels on the same page?
>>
>> On Tue, Mar 10, 2009 at 8:27 AM, Christian Helmbold
>> <[hidden email]> 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: [hidden email]
>>> For additional commands, e-mail: [hidden email]
>>>
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [hidden email]
>> For additional commands, e-mail: [hidden email]
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [hidden email]
> For additional commands, e-mail: [hidden email]
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

AW: Tabbed Panel with bookmarkable links

Christian Helmbold
In reply to this post by Brill Pappin

The problem is that the tabbed panels have to know the state of other panels to generate correct stateful links. So we need some object that keeps track of all tabbed panels and their states. This object must be initialized before the newLink method is called. But this method is called during construction, so it can not know other tabbed panels when the first tabbed panel is constructed.

This object can be "pageParameters". The only problem is, that this object doesn't reflect the actual state in every case, because it is also used for url construction. The solution is to remove items from pageParameters after url construction if they don't reflect the state.

And here comes the solution. It is now possible to use multiple BookmarkableTabbedPanels within one page.



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);
     
      /* Overwrite tabIndexes only used for link cunstruction, but doesn't
       * reflect the actual state.
       */
      if (index != getSelectedTab())        
        pageParameters.put(tabParameterName, "" + getSelectedTab());
    }

    if (index == getSelectedTab())
      link.setEnabled(false);
   
    return link;
  }
 
}


Regards
Christian






---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

AW: AW: Tabbed Panel with bookmarkable links

Christian Helmbold

In my code were two little bugs. If the constructor with parameter "defaultTabIndex" was used, the active tab was always set to this value regardless what tab the use clicked on. The other issue affected the specified parameter name that stores the active tab. It did not work in the constructor chain. This problem could be solved by rearrangement of constructors or by simple remove this parameter. I've choosen the last possibility to keep thinks simple.

 I post my corrected code again here, becaus someone could find it with a search engine and I don't want left him alone with broken code. The further development will be better placed in a code repository.

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;
    System.err.println(pageParameters);
    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.
   * @param unbookmarkableTabIndex Indexes of tabs with standard (no
   * bookmarkable) links. First tab has index 0.
     */
    public BookmarkableTabbedPanel(
        String id,
        List<ITab> tabs,
        int defaultTabIndex,
    PageParameters pageParameters,
    int ...unbookmarkableTabIndex)
    {
        this(id, tabs, pageParameters);
        this.defaultTabIndex = defaultTabIndex;
    if (!pageParameters.containsKey(tabParameterName))
      setSelectedTab(defaultTabIndex);
    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); // keep URLs short
      else
        pageParameters.put(tabParameterName, "" + index);
      link = new BookmarkablePageLink(
              linkId, getPage().getClass(), pageParameters);
     
      /* Overwrite parameters only used for link cunstruction, but doesn't
       * reflect the actual state.
       */
      if (index != getSelectedTab())        
        pageParameters.put(tabParameterName, "" + getSelectedTab());
    }

    if (index == getSelectedTab())
      link.setEnabled(false);
   
    return link;
  }
 
}





---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: AW: AW: Tabbed Panel with bookmarkable links

Brill Pappin
In reply to this post by Christian Helmbold
Yes, because you no longer have the previous state... I have the same  
problem, but maybe some ideas for a solution.

- Brill

On 10-Mar-09, at 11:25 AM, Christian Helmbold wrote:

>
>> 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 :)
>
> I agree. Is there an existing place in the wicket project to do this?
>
> I've discovered some troubles in my solution when multiple tabbed  
> panes are used in one page. The state of other panels is not hold  
> correctly in the URLs and so the tabbed panels influence each other.
>
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [hidden email]
> For additional commands, e-mail: [hidden email]
>


---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: AW: Tabbed Panel with bookmarkable links

jeremy@wickettraining.com
In reply to this post by Christian Helmbold
Use wicket-stuff.  It makes sense for this.  You might even consider just
adding this to minis in WS.
http://wicket-stuff.svn.sourceforge.net/viewvc/wicket-stuff/trunk/wicketstuff-core/minis-parent/

--
Jeremy Thomerson
http://www.wickettraining.com



On Tue, Mar 10, 2009 at 10:25 AM, Christian Helmbold <
[hidden email]> wrote:

>
> > 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 :)
>
> I agree. Is there an existing place in the wicket project to do this?
>
> I've discovered some troubles in my solution when multiple tabbed panes are
> used in one page. The state of other panels is not hold correctly in the
> URLs and so the tabbed panels influence each other.
>
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [hidden email]
> For additional commands, e-mail: [hidden email]
>
>
Reply | Threaded
Open this post in threaded view
|

AW: AW: Tabbed Panel with bookmarkable links

Christian Helmbold

The development of the bookmarkable tabbed panel component is continued on http://wicketskunkworks.org. We decided to use a Google Code project for now but we plan to make the final component available via wicket stuff or maybe in the extensions tree of the core distribution (i don't know if there is any relation between wicketstuff and the extensions of the core framework).

Regards
Christian






---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: AW: Tabbed Panel with bookmarkable links

Martijn Dashorst
Administrator
Why start yet another project when the intention is to move it to stuff anyway?

Martijn

On Thu, Mar 12, 2009 at 12:22 PM, Christian Helmbold
<[hidden email]> wrote:

>
> The development of the bookmarkable tabbed panel component is continued on http://wicketskunkworks.org. We decided to use a Google Code project for now but we plan to make the final component available via wicket stuff or maybe in the extensions tree of the core distribution (i don't know if there is any relation between wicketstuff and the extensions of the core framework).
>
> Regards
> Christian
>
>
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [hidden email]
> For additional commands, e-mail: [hidden email]
>
>



--
Become a Wicket expert, learn from the best: http://wicketinaction.com
Apache Wicket 1.3.5 is released
Get it now: http://www.apache.org/dyn/closer.cgi/wicket/1.3.

---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: AW: Tabbed Panel with bookmarkable links

Brill Pappin
In reply to this post by jeremy@wickettraining.com
We already set it up as WIcket Skunkworks :)

There are couple of reasons to set up something new.
1) We have not earned the right to commit to one of the official  
extension projects. It's a meritocratic thing after all.
2) At the moment it's hacked code and not a real component... some  
experimentation is needed (hence skunkworks).

This way we can monkey with a component that we only know that we two  
need. if it works well and others want it, we can migrate it to wicket  
stuff.

I imaging there is quite a lot of Wicket code out there that people  
have put together but is not at component quality, but none the less  
has promise. Let this be the place where it gets experimented upon.

- Brill

On 11-Mar-09, at 12:47 PM, Jeremy Thomerson wrote:

> Use wicket-stuff.  It makes sense for this.  You might even consider  
> just
> adding this to minis in WS.
> http://wicket-stuff.svn.sourceforge.net/viewvc/wicket-stuff/trunk/wicketstuff-core/minis-parent/
>
> --
> Jeremy Thomerson
> http://www.wickettraining.com
>
>
>
> On Tue, Mar 10, 2009 at 10:25 AM, Christian Helmbold <
> [hidden email]> wrote:
>
>>
>>> 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 :)
>>
>> I agree. Is there an existing place in the wicket project to do this?
>>
>> I've discovered some troubles in my solution when multiple tabbed  
>> panes are
>> used in one page. The state of other panels is not hold correctly  
>> in the
>> URLs and so the tabbed panels influence each other.
>>
>>
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [hidden email]
>> For additional commands, e-mail: [hidden email]
>>
>>


---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: AW: Tabbed Panel with bookmarkable links

Brill Pappin
In reply to this post by Martijn Dashorst
I don't think we know that it will be moved... right now we only know  
that we two need it.

- Brill

On 12-Mar-09, at 7:28 AM, Martijn Dashorst wrote:

> Why start yet another project when the intention is to move it to  
> stuff anyway?
>
> Martijn
>
> On Thu, Mar 12, 2009 at 12:22 PM, Christian Helmbold
> <[hidden email]> wrote:
>>
>> The development of the bookmarkable tabbed panel component is  
>> continued on http://wicketskunkworks.org. We decided to use a  
>> Google Code project for now but we plan to make the final component  
>> available via wicket stuff or maybe in the extensions tree of the  
>> core distribution (i don't know if there is any relation between  
>> wicketstuff and the extensions of the core framework).
>>
>> Regards
>> Christian
>>
>>
>>
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [hidden email]
>> For additional commands, e-mail: [hidden email]
>>
>>
>
>
>
> --
> Become a Wicket expert, learn from the best: http://wicketinaction.com
> Apache Wicket 1.3.5 is released
> Get it now: http://www.apache.org/dyn/closer.cgi/wicket/1.3.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [hidden email]
> For additional commands, e-mail: [hidden email]
>


---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: AW: AW: Tabbed Panel with bookmarkable links

vladimir.kovalyuk
In reply to this post by Christian Helmbold
But it is also a bug in the TabbedPanel which should work well without tabs.

Christian Helmbold-2 wrote
> > What if you use two different tabbed panels on the same page?

>
> Good point! It doesn't work with two panels on the same page! I don't know why
> and how to fix it.

It was a mistake in my test code, that lead to this error. I accidentally added the tabs of my second tabbed panel to the first one. Multiple BookmarkableTabbedPanels work fine now.

Regards
Christian






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