удалить номер версии в URL - PullRequest
       15

удалить номер версии в URL

23 голосов
/ 22 декабря 2011

Как удалить или скрыть номер версии в URL-адресе, представленном в Wicket 1.5?

Монтирование страницы не помогает.

http://localhost/MyPage/SubPage?0

Ответы [ 7 ]

20 голосов
/ 29 декабря 2011

In Application.init ():

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

со следующим классом 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); 
      } 
  } 
}
4 голосов
/ 16 мая 2014

Решение, использующее самостоятельно созданный класс MededMapperWithoutPageComponentInfo, не работает для Wicket 6.13+, страница не будет реагировать на действия пользователя обратного вызова. (Обратите внимание, что в Интернете существует несколько версий MountingMapperWithoutPageComponentInfo.)

Решение для 6.13+ (протестировано с 6.15) можно найти здесь:

http://apache -wicket.1842946.n4.nabble.com / Delete-версия-номер-в-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);
        }
    }
}

Затем вы можете монтировать страницы, используя:

// Put this in the init() method of your WebApplication subclass
getRootRequestMapperAsCompound().add(new NoVersionMapper("urlPatternOfAPage", YourPage.class));
4 голосов
/ 27 декабря 2011

Если вы не хотите номер версии, то ваша страница должна быть полностью без сохранения состояния, номер версии предназначен для страниц с состоянием.Например, если ваша страница содержит форму, вам следует использовать вариант компонента Form без сохранения состояния, то есть org.apache.wicket.markup.html.form.StatelessForm.Если ваша страница уже полностью не имеет состояния, вы можете дать подсказку wicket, вызвав метод org.apache.wicket.Page # setStatelessHint.

3 голосов
/ 14 сентября 2012

Для меня решение с setStatelessHint не сработало.Следующее сработало:

class MyApplication extends WebApplication {
    @Override protected void init() {
        getRequestCycleSettings().setRenderStrategy(
            IRequestCycleSettings.RenderStrategy.ONE_PASS_RENDER); 
        ....
    }
}
3 голосов
/ 27 декабря 2011

Используйте следующий маппер для монтирования страниц, это должно работать на любой странице, помечаемой книгой, кроме домашней страницы.

Вот как использовать маппер в Application.init ()

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

Вот карта.

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
  }
}
1 голос
/ 03 июня 2018

Для Wicket 8 этот класс NoVersionMapper работает:

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);
            }
        }
    }

Это в основном то же самое, что и код Devabc, но этот компилируется в Wicket 8. Он был протестированпротив известных регрессий предыдущих версий кода: Ajax работает, и обновление страницы не запускается, когда это не должно.

0 голосов
/ 14 сентября 2014

Предлагаемые обходные пути могут работать с конкретными выпусками и иметь побочные эффекты. Их следует считать взломами. Я использовал эти хаки, и они были сломаны новыми выпусками. Поэтому я создал запрос на поддержку универсальной платформы здесь (пожалуйста, прокомментируйте / проголосуйте): setVersioned (false) должен заставить одиночную версию страницы .

Еще один пример побочного эффекта: Страница перезагружается при отправке не версионной страницы

...