Play! Framework Model, View & Controller

Im letzten Post wurde eine kurze Beschreibung in den Aufbau einer Play! Anwendung gegeben.
Nachfolgend soll eine einfache kleine Anwendung erstellt werden.

App1: Model, Views, Controller

Die Anwendung soll die Links von verschiedenen Webseiten als Bookmarks speichern.
Hierzu benötigen wir ein Model für ein Bookmark:

package models;

import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import play.data.validation.Required;
import play.db.jpa.Model;
@Entity
public class Bookmark extends Model {
    @Temporal(TemporalType.DATE)
    public Date createdAt;
    @Required
    public String title;
    @Required
    public String url;
    public Bookmark(){
        createdAt = new Date();
    }
}

Wie der geneigte Java-Entwickler auf den ersten Blick erkennen mag, handelt es sich um ein normales JPA Model. Einzig der public Accessor für die einzelnen Attribute erscheint befremdlich.
Zur Beruhigung sei gesagt, dass hier eine der Vereinfuchungen von Play! in Aktion tritt. Zur Laufzeit werden hier die notwendigen Getter/Setter erstellt (diese können aber auch selbst definiert werden), sowie der direkte Zugriff auf die Attribut verhindert. (vgl. http://www.playframework.org/documentation/1.2.3/model#properties ).

Weiterhin unbekannt ist hier die Anotation @Required. Play! unterstützt hier eine on-Model-Validation. Das Attribut wird als Required gekennzeichnet, es ist also notwendig, dass diese Attribut zu Persistierung gesetzt ist. Wie die Validierung im Controller verwendet wird, dazu später mehr.