Ton*_*ony 5 java enums playframework playframework-2.0
我正在使用java on play 2.2构建一个应用程序.
我有一个java枚举作为我在路由中使用的函数中的参数.
这是我的enum课程.我四处搜索,发现我需要实现QueryStringBindable才能在路由中使用它.
public enum Something implements QueryStringBindable<Something> {
a,
b,
c;
@Override
public F.Option<ClientStatus> bind(String key, Map<String, String[]> params) {
String[] arr = params.get(key);
if (arr == null || arr.length == 0) {
return F.Option.None();
} else {
Something status = Something.valueOf(arr[0]);
return F.Option.Some(status);
}
}
@Override
public String unbind(String key) {
return null;
}
@Override
public String javascriptUnbind() {
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
然而我尝试了我的路线:
GET /someurl controllers.Application.function(status: util.enums.Something)
Run Code Online (Sandbox Code Playgroud)
但它返回错误消息的错误请求:
要求'GET/someurl'[util.enums.Something]
我用谷歌搜索,并没有找到任何答案在我的情况下工作.我错过了什么或玩不支持绑定枚举?
我有同样的问题,我终于发现它不能解决.
通过阅读文档PathBindable,QueryStringBindable我发现play框架需要 Bindable提供No Argument公共构造函数.根据定义enum,Java中无法实现.
所以我不得不用我的枚举来解决这个问题.在你的例子中我们会有类似的东西:
public enum Something {
a,
b,
c;
public static class Bound implements QueryStringBindable<Bound>{
private Something value;
@Override
public F.Option<ClientStatus> bind(String key, Map<String, String[]> params) {
String[] arr = params.get(key);
if (arr != null && arr.lenght > 0) {
this.value = Something.valueOf(arr[0]);
return F.Option.Some(this);
} else {
return F.Option.None();
}
}
@Override
public String unbind(String key) {
return this.value.name();
}
@Override
public String javascriptUnbind() {
return this.value.name();
}
public Something value(){
return this.value;
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后你必须some.package.Something.Bound在路由文件中使用类型作为类型.
编辑:在模板中使用它稍微有点棘手.你必须知道一点scala.关注@Aleksei的评论
<a href="@routes.MyController.showStuff(myEnumVar)">link</a>
Run Code Online (Sandbox Code Playgroud)
应该成为
<a href="@{
routes.MyController.showStuff(new MyEnumVarWrapper(myEnumVar)).url
}">link</a>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3298 次 |
| 最近记录: |