Wicket IndexedParamUrlCodingStrategy:如何指定缺失的参数?

时间:2011-05-12 23:56:42

标签: java url wicket

如何为IndexedParamUrlCodingStrategy指定空位置参数?

我安装了SearchPage

    mount(new IndexedParamUrlCodingStrategy("search", SearchPage.class));

这允许我建立像:

这样的网址
   /search/category/searchTerm/all/21-30

我可以成功检索位置参数:

    String category = parameters.getString("0", "");
    String searchTerm = parameters.getString("1", "");
    String filter = parameters.getString("2", "all");
    String pagination = parameters.getString("3", "1-10");

这允许带有空参数的URL,例如:

  /search//searchTerm/all/21-30   /* no category specified */

这种方法很好,但我似乎无法创建指向缺少参数的SearchPage的链接。

  params.put("0", ""); // try to set "empty" category
  params.put("1", "searchTerm");
  params.put("2", "all");
  params.put("3", "21-30");
  BookmarkablePageLink<SearchPage> link = new BookmarkablePageLink<SearchPage>("link", SearchPage.class, linkParams);

这会产生与以下网址的链接:

  /search/searchTerm/all/21-30

而非我的意图:

  /search//searchTerm/all/21-30

1 个答案:

答案 0 :(得分:1)

我不知道IndexedParamUrlCodingStrategy是否可以实现这一点。您可能必须切换到MixedParamUrlCodingStrategy,该{{3}}通过一组已定义的参数而不是“以0开头的升序排列的数字参数”来创建URL。 IndexedParamUrlCodingStrategy的Javadoc的这一部分让我觉得它不适合你的用例,或者你必须'发明'一些神奇的非空空字符串(它只是闻起来很糟糕)。 IndexedParamUrlCodingStrategy不会产生任何“//”(只是检查了源代码)

89    if (!url.endsWith("/"))
90    {
91        url.append("/");
92    }

显然你可以使它适合你的用例或报告为一个bug,但我不知道这不是一个功能......