Package play.mvc

Interface QueryStringBindable<T extends QueryStringBindable<T>>


  • public interface QueryStringBindable<T extends QueryStringBindable<T>>
    Binder for query string parameters.

    Any type T that implements this class can be bound to/from query one or more query string parameters. The only requirement is that the class provides a noarg constructor.

    For example, the following type could be used to encode pagination:

     class Pager implements QueryStringBindable<Pager> {
         public int index;
         public int size;
    
         public Optional<Pager> bind(String key, Map<String, String[]> data) {
             if (data.contains(key + ".index" && data.contains(key + ".size") {
                 try {
                     index = Integer.parseInt(data.get(key + ".index")[0]);
                     size = Integer.parseInt(data.get(key + ".size")[0]);
                     return Optional.<Pager>ofNullable(this);
                 } catch (NumberFormatException e) {
                     return Optional.<Pager>empty();
                 }
             } else {
                 return Optional.<Pager>empty();
             }
         }
    
         public String unbind(String key) {
             return key + ".index=" + index + "&" + key + ".size=" + size;
         }
    
         public String javascriptUnbind() {
             return "function(k,v) {\n" +
                 "    return encodeURIComponent(k+'.index')+'='+v.index+'&'+encodeURIComponent(k+'.size')+'='+v.size;\n" +
                 "}";
         }
     }
     
    Then, to match the URL /foo?p.index=5&p.size=42, you could define the following route:
     GET  /foo     controllers.Application.foo(p: Pager)
     
    Of course, you could ignore the p key specified in the routes file and just use hard coded index and size parameters if you pleased.
    • Method Detail

      • bind

        Optional<T> bind​(String key,
                         Map<String,​String[]> data)
        Bind a query string parameter.
        Parameters:
        key - Parameter key
        data - The query string data
        Returns:
        An instance of this class (it could be this class) if the query string data can be bound to this type, or None if it couldn't.
      • unbind

        String unbind​(String key)
        Unbind a query string parameter. This should return a query string fragment, in the form key=value[&key2=value2...].
        Parameters:
        key - Parameter key
        Returns:
        this key's query-string fragment.
      • javascriptUnbind

        String javascriptUnbind()
        Javascript function to unbind in the Javascript router.

        If this bindable just represents a single value, you may return null to let the default implementation handle it.

        Returns:
        null for default behavior, otherwise a valid javascript function that accepts the key and value as arguments and returns a valid query string fragment (in the format key=value)