Mar 30, 2009

View's in Lift

I think Lift framework is really interesting and fun thing to play with. Here is my ultra short guide how to try out the framework's Views.

Views are classes that returns content as scala.xml.NodeSeq. Lift maps a browser request to view class and its method. For example /TestView/showme would be mapped to TestView view- class and to showme method. The method name in the request is actually not an actual method in the class - it is a name that is dispatched to the dispatch method of the view class. The method returns a method to handle the request. To make it possible for Lift to find your view classes you sould store them to your.package.view package.

Lets create a simple view that shows simple response in XML. First we need to create the View class. It should be put into your [Package name].view package. Lets call the class TestView:


package your.package.view

import net.liftweb.http.LiftView
import scala.xml.NodeSeq

class TestView extends LiftView {
def dispatch = {
case "testPath" = > provideTestPath _
}

def provideTestPath(): NodeSeq = <html><body>Test</body></html>
}
So the class extends the trait LiftView. It defines the method dispatch that maps the requests with real class methods. In our case we only have testPath that matps to provideTestPath method. That method then returns the NodeSeq.

Next we need to tell Lift that we have this View available and allow it to display it. This happens by modifying our SiteMap. Go to your bootstrap.liftweb package and open the Boot class. Then go to the part where the SiteMap is defined. Assuming that you are playing with the skeleton created by the maven archetypes you should modify it to this:

...
// Build SiteMap
val viewEntry = Menu(Loc("testView",
("TestView" :: Nil) -> true,
"TestView",
Loc.Hidden))
val entries = Menu(Loc("Home", List("index"), "Home")) :: viewEntry :: User.sitemap
LiftRules.setSiteMap(SiteMap(entries:_*))
...

What we have done here? Created a new Menu entry called "TestView". With the part "TestView"::Nil we tell to Lift that map /TestView/* to this link. We have now allowed that /TestView/testPath maps to our TestView class and then to the method inside it. If you don't add the link into the SiteMap then Lift prevents anybody to access the link. It only shows 404 error. This is way to ensure that you as a developer can control what parts should be accessed.

Thats it. Now just point to your server /TestView/testPath and you will see the results!

No comments:

Post a Comment