2012-06-14 10 views
5

के लिए QueryStringBindable मैंने एक enum प्रकार Format परिभाषित किया है जो QueryStringBindable लागू करता है। मुझे लगता है कि मैंने इसे सही तरीके से कार्यान्वित किया है, लेकिन मेरे मार्ग फ़ाइल में, मैं अपने पैरामीटर को रूट पैरामीटर के रूप में निर्दिष्ट नहीं कर सकता, क्योंकि संकलक इसे नहीं ढूंढ सकता है, और मुझे नहीं पता कि इसे रूट फ़ाइल में कैसे आयात किया जाए।एक कस्टम enum

यहाँ 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(); 
    } 
} 

और यहाँ मेरा मार्ग है:

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

मैं अपने enum के बारे में संकलक कैसे बता सकते हैं? धन्यवाद!

संपादित

मैं भी रूप में अन्य पदों में सिफारिश की गई है 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) 
) 

मुझे लगता है कि बदल गया है और अपने सर्वर को पुनः आरंभ, लेकिन ऐसा लगता है कि कोई फर्क नहीं पड़ता। मार्गों फ़ाइल में

उत्तर

0

उपयोग योग्य नाम है, यानी web.Format

+1

पोस्ट करने से पहले यह कोशिश की। कोई पाँसा नहीं। – Samo

4

मैं एक ही समस्या थी और मैं अंत में पता चला कि यह व्याख्या करने योग्य है के रूप में नहीं है।

PathBindable और QueryStringBindable के लिए दस्तावेज़ पढ़कर मैंने पाया कि खेलने ढांचे Bindable एक नहीं तर्क सार्वजनिक निर्माता प्रदान करने के लिए की आवश्यकता है। जावा में enum के साथ परिभाषा के अनुसार कोई भी संभव नहीं है।

मैं आपको वही समाधान देना चाहता हूं जो मैंने एक और (हालिया) प्रश्न दिया था। मैंने बस enum को एक छोटे रैपर वर्ग में लपेट लिया जो QueryStringBindable या PathBindable लागू करता है।

play framework - bind enum in routes