Sam*_*amo 6 java enums query-string playframework
我已经定义了一个Format实现的枚举类型QueryStringBindable.我想我已经正确实现了它,但在我的路由文件中,我不能将我的类型指定为路由参数,因为编译器找不到它,我不知道如何将它导入路由文件.
这是枚举:
package web;
import java.util.Map;
import play.libs.F;
import play.mvc.QueryStringBindable;
public enum Format implements QueryStringBindable<Format> {
Html,
Pdf,
Csv;
private Format value;
@Override
public F.Option<Format> bind(String key, Map<String, String[]> data) {
String[] vs = data.get(key);
if (vs != null && vs.length > 0) {
String v = vs[0];
value = Enum.valueOf(Format.class, v);
return F.Option.Some(value);
}
return F.Option.None();
}
@Override
public String unbind(String key) {
return key + "=" + value;
}
@Override
public String javascriptUnbind() {
return value.toString();
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的路线:
GET /deposits controllers.Deposits.index(selectedAccountKey: Long ?= 0, format: Format ?= Format.Html)
Run Code Online (Sandbox Code Playgroud)
如何告诉编译器我的枚举?谢谢!
编辑
我也尝试在Build.scala中添加类型的路径,如其他帖子中所推荐的那样:
val main = PlayProject(appName, appVersion, appDependencies, mainLang = JAVA).settings(
routesImport += "web.Format",
resolvers += Resolver.url("My GitHub Play Repository", url("http://www.joergviola.de/releases/"))(Resolver.ivyStylePatterns)
)
Run Code Online (Sandbox Code Playgroud)
我改变了它并重新启动了我的服务器,但似乎没有任何区别.
我遇到了同样的问题,我终于发现它无法原样解决。
通过阅读的文档PathBindable,QueryStringBindable我发现play框架要求 Bindable提供No Argument公共构造函数。根据定义,这enum在Java中是不可能的。
我想为您提供与我提出的另一个(较新的)问题相同的解决方案。我只是将枚举包装到一个小的包装类中,该类实现了QueryStringBindable或PathBindable。
| 归档时间: |
|
| 查看次数: |
1190 次 |
| 最近记录: |