2012-06-14 29 views
5

Tôi đã xác định loại enum Format triển khai QueryStringBindable. Tôi nghĩ rằng tôi đã thực hiện nó một cách chính xác, nhưng trong tập tin tuyến đường của tôi, tôi không thể xác định loại của tôi như là một tham số tuyến đường, bởi vì trình biên dịch không thể tìm thấy nó, và tôi không có ý tưởng làm thế nào để nhập nó vào tập tin tuyến đường.QueryStringBindable cho enum tùy chỉnh

Đây là enum:

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(); 
    } 
} 

Và đây là con đường của tôi:

GET  /deposits         controllers.Deposits.index(selectedAccountKey: Long ?= 0, format: Format ?= Format.Html) 

Làm thế nào tôi có thể nói trình biên dịch về enum của tôi? Cảm ơn!

Sửa

Tôi cũng đã thử thêm các đường dẫn đến các loại trong Build.scala như đã được đề nghị trong bài viết khác:

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) 
) 

tôi đã thay đổi điều đó và khởi động lại máy chủ của tôi, nhưng nó dường như không tạo ra sự khác biệt nào.

Trả lời

0

Sử dụng tên đủ điều kiện trong file tuyến đường, ví dụ: web.Format

+1

Đã thử trước khi đăng. Không có con xúc xắc. – Samo

4

tôi đã cùng một vấn đề và cuối cùng tôi phát hiện ra rằng nó không phải là giải quyết được như vậy.

Bằng cách đọc tài liệu cho PathBindableQueryStringBindable Tôi thấy rằng khung chơi yêu cầu Bindable để cung cấp hàm tạo công khai Không có đối số. Mà theo định nghĩa là không thể với enum trong Java.

Tôi muốn cung cấp cho bạn giải pháp tương tự mà tôi đã đưa ra một câu hỏi khác (gần đây hơn). Tôi chỉ bọc enum vào một lớp Wrapper nhỏ thực hiện QueryStringBindable hoặc PathBindable.

play framework - bind enum in routes

Các vấn đề liên quan