alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

Play Framework/Scala example source code file (QueryStringBindable.java)

This example Play Framework source code file (QueryStringBindable.java) is included in my "Source Code Warehouse" project. The intent of this project is to help you more easily find Play Framework (and Scala) source code examples by using tags.

All credit for the original source code belongs to Play Framework; I'm just trying to make examples easier to find. (For my Scala work, see my Scala examples and tutorials.)

Play Framework tags/keywords

map, mvc, option, play, play framework, querystringbindable, string

The QueryStringBindable.java Play Framework example source code

/*
 * Copyright (C) 2009-2013 Typesafe Inc. <http://www.typesafe.com>
 */
package play.mvc;

import java.util.*;

import play.libs.F.*;

/**
 * Binder for query string parameters.
 *
 * Any type <code>T</code> 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:
 *
 * <pre>
 * class Pager implements QueryStringBindable<Pager> {
 *     public int index;
 *     public int size;
 *
 *     public Option<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 Some(this);
 *             } catch (NumberFormatException e) {
 *                 return None();
 *             }
 *         } else {
 *             return None();
 *         }
 *     }
 *
 *     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" +
 *             "}";
 *     }
 * }
 * </pre>
 *
 * Then, to match the URL <code>/foo?p.index=5&p.size=42</code>, you could define the following route:
 *
 * <pre>
 * GET  /foo     controllers.Application.foo(p: Pager)
 * </pre>
 *
 * Of course, you could ignore the <code>p</code> key specified in the routes file and just use hard coded index and
 * size parameters if you pleased.
 */
public interface QueryStringBindable<T extends QueryStringBindable<T>> {
    
    /**
     * Bind a query string parameter.
     *
     * @param key Parameter key
     * @param data The query string data
     * @return 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.
     */
    public Option<T> bind(String key, Map<String,String[]> data);
    
    /**
     * Unbind a query string parameter.  This should return a query string fragment, in the form
     * <code>key=value[&key2=value2...]</code>.
     *
     * @param key Parameter key
     */
    public String unbind(String key);
    
    /**
     * 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.
     */
    public String javascriptUnbind();
    
}

Other Play Framework source code examples

Here is a short list of links related to this Play Framework QueryStringBindable.java source code file:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.