2012-09-22 65 views

回答

4

Scalatra不提供這樣一個複雜的功能。這不是複合從它的難以實現,它的複雜性來自派對的數量一起玩。

首先,您需要一個Model來表示您的域中的對象,並且默認情況下Scalatra不提供任何模型庫。運行時使用此模型將HTTP請求中設置的任意字符串轉換爲某個模型的實例。例如

  • 如果請求是一個GET並指定像user.id一個參數,所述結合軟件此字符串User類型的對象,在由它的ID數據庫中找到轉換。
  • 如果請求是一個POST,規定了三個參數,如user.nameuser.passworduser.birthday並執行指定user.id,運行時構建User類型的一個對象,它已準備好被放置在DB用簡單User.save() - 提供,如果通過了驗證,如果有的話,在User
  • 指定如果請求是一個PUT(或等同於Scalatra的文檔解釋),幷包含user.iduser.birthday,第一一個User由ID檢索,那麼它的生日更新並最終可用Ø控制器,準備打電話User.save()

正如你所看到的,這需要一個模型庫,具有約束力的圖書館,並在運行時膠水的支持。

要生成HTML表單,您需要一個輔助函數庫,可以檢查模型併爲您輸出HTML位。例如,你的圖書館考察User類,檢測到它有三個公共領域namepasswordbirthday,並根據使用<model>.<property>作爲輸入姓名的慣例,輸出

<form action="$$$$" method="$$$$"> 
    <input name="user.name" /> 
    <input name="user.password" /> 
    <input name="user.birthday" /> 
    <input type="submit" /> 
</form> 

注意

一些上下文被學習(例如路由)
  • 相同的命名約定必須由綁定庫被用於反序列化後
    • URL和方法只能填充提交此表對象

    一旦你所有的作品放在一起,你已經做出了一個MVC框架,有啥使用像Scalatra的一個微小的,基於REST的軟件呢?

  • 相關問題