如何在Wicket 1.5中模仿HybridUrlCodingStrategy?

The*_*zle 11 java wicket

我们有一个现有的Java Wicket 1.4应用程序,它广泛使用HybridUrlCodingStrategy:

mount(new HybridUrlCodingStrategy("/myurl", MyPage.class));
Run Code Online (Sandbox Code Playgroud)

这导致我们的URL看起来像:

http://host/myurl/paramName1/paramValue1/paramName2/paramValue2
Run Code Online (Sandbox Code Playgroud)

我想在Wicket 1.5中维护这种URL格式,但是已经删除了HybridUrlCodingStrategy.在wicket 1.5中,页面安装为:

mountPage("/myurl", MyPage.class);
Run Code Online (Sandbox Code Playgroud)

这导致传统的URL如下:

http://host/myurl?paramName1=paramValue2&paramName2=paramValue2
Run Code Online (Sandbox Code Playgroud)

我已经读过我们应该使用MountedMapper类,但是看看Wicket 1.5示例,API文档和源代码,我仍然不清楚如何使用MountedMapper获得与HybridUrlCodingStrategy相同的行为.

有谁知道如何做到这一点?

小智 2

也许是这样的:

mountPage("/myurl/paramName1/${paramValue1}/paramName2/${paramValue2}", MyPage.class)
Run Code Online (Sandbox Code Playgroud)

会工作?当然,您必须手动指定参数,这可能需要更多工作。MountedMapper类 javadoc解释了如何使用参数。

我能想到的另一个选择是(注意:这未经测试):

class MyPageParametersEncoder implements IPageParametersEncoder() {
    public PageParameters decodePageParameters(Request request)
    {
        PageParameters parameters = new PageParameters();

        int i = 0;
        for (Iterator<String> segment = request.getUrl().getSegements().iterator(); segment.hasNext()) {
            String key = segment.next();
            String value = segment.next();

            parameters.add(key, value);
        }

        return parameters.isEmpty() ? null : parameters;
    }

    public Url encodePageParameters(PageParameters pageParameters)
    {
        Url url = new Url();

        for (PageParemeters.NamedPair pair : pageParameters.getAllNamed() {
            url.getSegments().add(pair.getKey());
            url.getSegments().add(pair.getValue());
        }

        return url;
    }
}

mount(new MountedMapper("/myurl/", MyPage.class, new MyPageParametersEncoder());
Run Code Online (Sandbox Code Playgroud)