Página de documentación de validacion http://www.playframework.org/documentation/1.2.3/validation

Existen principalmente dos formas de especificar la validación en nuestra acción. Anotando los parámetros de nuestra acción o anotando los campos de nuestra entidad.

Anotar los parámetros de la acción

1
2
3
public static void save(@Required String name) {

}

Anotar los campos de la entidad

1
2
3
4
5
6
7
8
@Entity
public class Tweet extends Model {

<span class="nd">@Required</span>
<span class="kd">public</span> <span class="n">String</span> <span class="n">msg</span><span class="o">;</span>

<span class="o">...</span>

}

En el caso de que estemos pasando un objeto entero mediante parámetro, podemos validarlo utilizando la anotación @Valid. Comprobará todos sus campos y las anotaciones que tiene.

1
2
3
public static void create(@Valid Tweet tweet) {

}

Es muy común el patrón de: Si la entidad está correcta, almacenala en base de datos, en caso contrario no hagas nada.

1
2
3
4
5
public static void create(@Valid Tweet tweet) {
    if(!validation.hasErrors()){
        tweet.save();
    }
}

La simplificación de este método sería

1
2
3
public static void create(Tweet tweet){
    tweet.validateAndSave();
}

Validaciones disponibles

Puedes consultar las validaciones incluidas por defecto en http://www.playframework.org/documentation/1.2.3/validation-builtin

Mostrando los errores de validación

Play trae una serie de tags que te permiten mostrar los errores de validación.

Ejercicio

Añade validación al formulario que envía el tweet.

Solución

apps/controllers/Timeline.java

1
2
3
4
5
6
7
8
9
10
11
public static void create(String tweet){
    checkAuthenticity();
    Tweet t = new Tweet(tweet, Security.userConnected());
    t.validateAndSave();

<span class="k">if</span><span class="o">(</span><span class="n">validation</span><span class="o">.</span><span class="na">hasErrors</span><span class="o">()){</span>
    <span class="n">validation</span><span class="o">.</span><span class="na">keep</span><span class="o">();</span>
<span class="o">}</span>

<span class="n">index</span><span class="o">();</span>

}

app/views/Timeline/index.html

1
2
3
4
5
6
7
  #{ifErrors}
        <div class=“alert-message error”>
        #{errors}
           <p>${error}</p>
       #{/errors}
        </div>
    #{/ifErrors}