usuń numer wersji w adresie url

Jak mogę usunąć lub ukryć numer wersji w adresie URL wprowadzonym w Wicket 1.5?

Montowanie strony nie pomaga.

http://localhost/MyPage/SubPage?0
Author: Stijn Geukens, 2011-12-22

7 answers

W Aplikacji.init ():

mount(new MountedMapperWithoutPageComponentInfo("/subpage", MyPage.class));

Z następującą klasą Mapper:

public class MountedMapperWithoutPageComponentInfo extends MountedMapper {

  public MountedMapperWithoutPageComponentInfo(String mountPath, Class<? extends IRequestablePage> pageClass) {
    super(mountPath, pageClass, new PageParametersEncoder());
  }

  @Override
  protected void encodePageComponentInfo(Url url, PageComponentInfo info) {
    // do nothing so that component info does not get rendered in url
  }

  @Override 
  public Url mapHandler(IRequestHandler requestHandler) 
  { 
      if (requestHandler instanceof ListenerInterfaceRequestHandler ||
                requestHandler instanceof BookmarkableListenerInterfaceRequestHandler) { 
          return null; 
      } else { 
           return super.mapHandler(requestHandler); 
      } 
  } 
}
 19
Author: Apostolos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-25 16:55:21

Jeśli nie chcesz mieć numeru wersji, to strona powinna być całkowicie bezstanowa, numer wersji jest przeznaczony dla stron o statusie. Na przykład, jeśli Twoja strona zawiera formularz, powinieneś użyć bezstanowego wariantu komponentu formularza, czyli org.Apacz.wicket.znaczniki.html.forma.StatelessForm. Jeśli Twoja strona jest już całkowicie bezpaństwowa, możesz dać wicket podpowiedź, powołując się na org.Apacz.wicket.Strona # setStatelessHint metoda.

 4
Author: Rolf Thunbo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-27 19:15:22

Rozwiązanie wykorzystujące samodzielnie utworzoną klasę MountedMapperWithoutPageComponentinfo nie działa dla Wicket 6.13+, strona nie będzie odpowiadać na działania użytkownika wywołania zwrotnego. (Zauważ, że istnieje wiele wersji MountedMapperWithoutPageComponentinfo w Internecie.)

Rozwiązanie dla 6.13+ (testowane z 6.15) można znaleźć tutaj:

Http://apache-wicket.1842946.n4.nabble.com/Delete-version-number-in-url-td4665752.html

Https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java

// Put this code in your WebApplication subclass
import org.apache.wicket.core.request.mapper.MountedMapper;
import org.apache.wicket.request.component.IRequestablePage;
import org.apache.wicket.request.mapper.parameter.PageParametersEncoder;
import org.apache.wicket.request.mapper.info.PageComponentInfo;
import org.apache.wicket.request.IRequestHandler;
import org.apache.wicket.core.request.handler.BookmarkableListenerInterfaceRequestHandler;

private static class NoVersionMapper extends MountedMapper {
    public NoVersionMapper(final Class<? extends IRequestablePage> pageClass) {
        this("/", pageClass);
    }

    public NoVersionMapper(String mountPath, final Class<? extends IRequestablePage> pageClass) {
        super(mountPath, pageClass, new PageParametersEncoder());
    }

    @Override
    protected void encodePageComponentInfo(Url url, PageComponentInfo info) {
        //Does nothing
    }

    @Override
    public Url mapHandler(IRequestHandler requestHandler) {
        if (requestHandler instanceof ListenerInterfaceRequestHandler || requestHandler instanceof BookmarkableListenerInterfaceRequestHandler) {
            return null;
        } else {
            return super.mapHandler(requestHandler);
        }
    }
}

Następnie możesz montować strony używając:

// Put this in the init() method of your WebApplication subclass
getRootRequestMapperAsCompound().add(new NoVersionMapper("urlPatternOfAPage", YourPage.class));
 4
Author: Devabc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-16 13:04:05

Użyj poniższego mapera do montowania stron, powinno to działać na każdej stronie oznaczalnej książki, z wyjątkiem strony głównej.

Oto jak używać mapera w aplikacji.init ()

mount(new MountedMapperWithoutPageComponentInfo("/subpage", MyPage.class));
Oto maper.
import org.apache.wicket.request.Url;
import org.apache.wicket.request.component.IRequestablePage;
import org.apache.wicket.request.mapper.MountedMapper;
import org.apache.wicket.request.mapper.info.PageComponentInfo;
import org.apache.wicket.request.mapper.parameter.PageParametersEncoder;

public class MountedMapperWithoutPageComponentInfo extends MountedMapper {

  public MountedMapperWithoutPageComponentInfo(String mountPath, Class<? extends IRequestablePage> pageClass) {
    super(mountPath, pageClass, new PageParametersEncoder());
  }

  @Override
  protected void encodePageComponentInfo(Url url, PageComponentInfo info) {
    // does nothing so that component info does not get rendered in url
  }
}
 3
Author: Alinoor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-28 17:23:03

Dla mnie rozwiązanie z setStatelessHint nie zadziałało. Wykonali następujące prace:

class MyApplication extends WebApplication {
    @Override protected void init() {
        getRequestCycleSettings().setRenderStrategy(
            IRequestCycleSettings.RenderStrategy.ONE_PASS_RENDER); 
        ....
    }
}
 3
Author: Adrian Smith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-14 10:14:44

Dla Wicket 8, Ta klasa NoVersionMapper działa:

Https://github.com/apache/openmeetings/blob/master/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java#L314



    public class NoVersionMapper extends MountedMapper {
        public NoVersionMapper(final Class pageClass) {
            this("/", pageClass);
        }

        public NoVersionMapper(String mountPath, final Class pageClass) {
            super(mountPath, pageClass, new PageParametersEncoder());
        }

        @Override
        protected void encodePageComponentInfo(Url url, PageComponentInfo info) {
            //Does nothing
        }

        @Override
        public Url mapHandler(IRequestHandler requestHandler) {
            if (requestHandler instanceof ListenerRequestHandler || requestHandler instanceof BookmarkableListenerRequestHandler) {
                return null;
            } else {
                return super.mapHandler(requestHandler);
            }
        }
    }

Jest to w zasadzie to samo co Kod Devabc, ale ten kompiluje się na Wicket 8. Został przetestowany pod kątem znanych regresji poprzednich wersji kodu: Ajax działa i nie jest uruchamiane odświeżanie strony, gdy nie powinno.

 1
Author: Zala Pierre GOUPIL,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-04 12:22:26

Proponowane dotychczas obejścia mogą działać z konkretnymi wydaniami i mieć skutki uboczne. Powinny być uważane za hacki. Użyłem tych hacków i zostały one złamane przez nowe wydania. Dlatego utworzyłem tutaj prośbę o ogólne wsparcie frameworku (proszę o komentarz / głosowanie): setVersioned (false) powinien wymusić wersję jednostronicową.

Kolejny przykład efektu ubocznego: przeładowanie strony przy wysyłaniu nie-wersjonowanej strony

 0
Author: user250343,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-14 00:03:28