通过Wicket 6中的PageParameters将可空参数传递给Page

时间:2013-06-25 13:57:24

标签: java wicket guava wicket-1.6

我需要将参数传递给我的页面,我找不到传递可能为null的参数的方法。

如果我这样做:

PageParameters pageParameters = new PageParameters ();
pageParameters.add ("key", null);

这将导致异常

  

java.lang.IllegalArgumentException:参数'value'可能不为null。        在org.apache.wicket.util.lang.Args.notNull(Args.java:41)

如果我使用Google Guava的Optional,即使Optional对象没有保持null,也就是不等于Optional.absent(),我找不到任何方式来转换对象:

在我的目标网页的构造函数中,我做了

StringValue sv = parameters.get ("key");
sv.to ( Optional.of (MyEnum.SOME_ENUM_CONSTANT).getClass () );

当我运行它时,我收到此错误:

  

org.apache.wicket.util.string.StringValueConversionException:不能   将'Optional.of(SOME_ENUM_CONSTANT)'转换为类型类   com.google.common.base.Present。

我做错了吗?

还有其他方法可以在wicket 6中传递一个可能为null的对象吗?

我注意到在wicket 1.4中他们有PageParameters.NULL似乎在wicket 6中消失了。

谢谢

2 个答案:

答案 0 :(得分:3)

这可能太简单了,但

出了什么问题
Object value = ?
if (value != null) {
    pageParameters.add ("key", value);
}

StringValue sv = pageParameters.get("key");
if (!sv.isNull()) {
    // process string value
}

答案 1 :(得分:0)

wicket中的所有页面参数最终都将被视为字符串。我们的想法是页面参数将出现在请求的URL上。

来自javadoc:

  

假设我们在/user上安装了一个页面,并且访问了以下网址/user/profile/bob?action=view&redirect=false。在此示例中,profilebob是具有相应索引01的索引参数。 actionredirect是命名参数。

如果您添加x=y&x之类的内容,参数x将出现两次,一次使用字符串y,另一次使用空字符串。

根据您要完成的任务,我建议

  • 当需要null值时,请不要传递参数,并使用isNulltoOptional方法。
  • 使用索引参数并测试某个单词是否存在