|
Play Framework/Scala example source code file (QueryStringBindable.java)
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 examplesHere 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 |
Copyright 1998-2024 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.