1

我需要向我的页面传递一个参数,但我找不到传递可能为空的参数的方法。

如果我做:

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

这将导致异常

java.lang.IllegalArgumentException:参数“值”可能不为空。在 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。

难道我做错了什么?

有没有其他方法可以在检票口 6 中传递一个可能为空的对象?

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

谢谢

4

2 回答 2

3

这可能太简单了,但有什么问题

Object value = ?
if (value != null) {
    pageParameters.add ("key", value);
}

StringValue sv = pageParameters.get("key");
if (!sv.isNull()) {
    // process string value
}
于 2013-06-25T14:28:31.917 回答
0

wicket 中的所有页面参数最终都将被视为字符串。这个想法是页面参数将位于请求的 URL 上。

从javadoc:

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

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

根据您要完成的工作,我建议

  • 当需要一个值时,根本不要传递参数null并使用isNullortoOptional方法。
  • 使用索引参数并测试是否存在某个单词
于 2013-06-25T14:32:54.173 回答