ПРИМЕЧАНИЕ: новый класс был добавлен в Wicket 1.5.2 для обратной совместимости с кодировкой URL в стиле 1.4.Он называется UrlPathPageParametersEncoder - используйте его, если вы переносите приложение wicket 1.4 на 1.5 и у вас есть закладки на странице в стиле:
www.mysite.com / name1 / value1 / name2 / value2
У нас возникла та же проблема при переходе с 1.4 на 1.5.Любое приложение 1.4, которое работало некоторое время, вероятно, будет иметь набор ссылок, указывающих на него с внешних сайтов в сети.Вы действительно хотите, чтобы версия вашего приложения Wicket 1.5 могла обрабатывать эти существующие гибридные ссылки без генерации ошибки.
При переходе на 1.5, без реализации IPageParametersEncoder, совместимой с 1.4, вам нужновключить полную спецификацию параметров в каждое монтирование, если вы хотите избежать внесения изменений в каждый отдельный класс Page, который читает параметры.Реализация ниже означает, что больше не нужно.Просто смонтируйте страницу, как предложено выше.
Я отправляю этот файл .java в качестве патча для разработчиков Wicket - они могут включить его в Wicket в будущем, чтобы упростить реализацию обратно совместимого параметра URL.кодирование для других 1.4-миграторов.
Я взял приведенный выше пример кода luniv и внес несколько небольших изменений для его компиляции / работы.Следующее должно работать как кодировщик параметров для обеспечения кодирования параметров стиля 1.4.x в 1.5.
package org.apache.wicket.request.mapper.parameter;
import java.lang.*;
import org.apache.wicket.request.mapper.parameter.IPageParametersEncoder;
import java.util.Iterator;
import org.apache.wicket.request.Request;
import org.apache.wicket.request.Url;
import org.apache.wicket.request.mapper.parameter.PageParameters;
public
class HybridPageParametersEncoder implements IPageParametersEncoder
{
/**
* Encodes a URL in the form:
*
* /mountpoint/paramName1/paramValue1/paramName2/paramValue2
*
* (i.e. a URL using the pre wicket 1.5 Hybrid URL strategy)
*/
public Url encodePageParameters(PageParameters pageParameters)
{
Url url = new Url();
for (PageParameters.NamedPair pair : pageParameters.getAllNamed())
{
url.getSegments().add(pair.getKey());
url.getSegments().add(pair.getValue());
}
return url;
}
/**
* Decodes a URL in the form:
*
* /mountpoint/paramName1/paramValue1/paramName2/paramValue2
*
* (i.e. a URL using the pre wicket 1.5 Hybrid URL strategy)
*/
public PageParameters decodePageParameters(Request request)
{
PageParameters parameters = new PageParameters();
int i = 0;
for (Iterator<String> segment = request.getUrl().getSegments().iterator(); segment.hasNext(); )
{
String key = segment.next();
String value = segment.next();
parameters.add(key, value);
}
return parameters.isEmpty() ? null : parameters;
}
}