Lift en databases

Lift heeft een Mapper framework maakt het snel ontwikkelen van database applicaties mogelijk Bijna alle boilerplate code is opgenomen in Scala traits. Zodat een complete applicatie met enkele regels code geschreven kan worden. De MetaMegaProtoUser bevat de volledige login infrastructuur
  • login scherm
  • aanmelden
  • email validatie
  • wijzigen
  • password kwijt
  • logout
class User extends MegaProtoUser[User] 
object User extends User with MetaMegaProtoUser[User] 



CRUDify

Dit is alles wat er nodig is voor een Book definitie. De CRUDify trait bevat de volledige CRUD beheerschermen
  • create
  • view
  • edit
  • delete
  • list
object Book extends Book with LongKeyedMetaMapper[Book] 
             with CRUDify[Long, Book] 
             
                    

Lift snippets

Lift template zijn geschreven in Xhtml en daarin opgenomen eigen xml tags. Deze tags zijn op allerlei manieren te binden aan programmacode. We zullen een aantal voorbeelden geven.
<lift:login.loggedIn>
Welkom
</lift:login.loggedIn>

class Login {
  def loggedIn (xhtml : NodeSeq) : NodeSeq = {   
      if (User.loggedIn_?) xhtml else NodeSeq.Empty
  } }
<lift:bookView.view>
<book:title />
<book:author />
</lift:bookView.view>


class BookView {
   def view(xhtml : NodeSeq): NodeSeq = {
      bind("book", html,
        "title" -> b.title,
        "author" -> b.author,
      ) } }

Comet

Lift heeft uitgebreide ajax functionaliteit. En zwaar leunende op het Scala Actor framework kun je in Lift op eenvoudige wijze massief parallelle comet applicaties bouwen. Om dezelfde reden zijn Twitter en LinkedIn al overgestapt op Scala. Comet kun je als een ongekeerde ajax beschouwen. De aanroep gaat van de server naar de browser. Dat betekent dat de server alle comet aanroepen als parallel processen op de server klaar staan om afgevuurde te worden. Dit gaat niet werken met Java threads, maar wel met Scala actors. De comet tikker:
Fri Jul 30 14:52:38 CEST 2010
 <lift:comet 
    type="CometSnippit"/>
    
    
    
    
    
    
    
    
case object Tick 
class CometSnippit extends CometActor {  
  def render = (<div id="time">{now}</div>)  
  ActorPing.schedule(this, Tick, 1000L) 
  
  override def lowPriority : PartialFunction[Any, Unit] = {
    case Tick => {
      partialUpdate(SetHtml("time", Text(now.toString)))
      ActorPing.schedule(this, Tick, 1000L) 
    } } }

Ajax

Ajax is een tussentijds request naar de server en terug. Lift heeft een complete bibliotheek met Ajax componenten. Hier een voorbeeldje Een ajax voorbeeld

 <div id="messages"/>
<lift:AjaxSnippit.myFunc>
      <hello:button/>
</lift:AjaxSnippit.myFunc>


 
class AjaxSnippit {
  def myFunc(html: NodeSeq) : NodeSeq = {
    bind("hello", html, 
     "button" -> SHtml.ajaxButton(Text("Hallo"), 
        () => DisplayMessage("messages",(<div>Doei</div>) ,
                                   5 seconds, 1 second)) )
      ) } } 



cursussen


projecten