3

現在params、関数を使用して、URL に投稿されたデータを取得しています。

Play Framework のように Scalatra でフォームを処理する方法は他にありますか? Scalatra は、フォームの作成とフォームへの自動入力の両方に使用できるオブジェクトをサポートしていますか?

4

1 に答える 1

4

Scalatra はそのような複雑な機能を提供していません。実装が難しいという意味では複雑ではありません。その複雑さは、一緒にプレイするパーティの数に由来します。

まず第一にModel、ドメイン内のオブジェクトを表すには が必要であり、Scalatra はデフォルトでモデル ライブラリを提供していません。このモデルは、HTTP 要求で設定された任意の文字列をモデルのインスタンスに変換するために、ランタイムによって使用されます。例えば

  • リクエストが で、のGETようなパラメータが指定されている場合user.id、バインディング ソフトウェアは、この文字列をタイプ のオブジェクトに変換します。このオブジェクトはUser、ID によってデータベース内で検出されます。
  • リクエストが でPOST、 のような 3 つのパラメーターを指定しuser.nameuser.passwordを指定user.birthdayない場合、ランタイムは、DB に配置する準備ができているuser.idタイプのオブジェクトを単純な-で構築します。クラスUserUser.save()User
  • リクエストが a PUT(または Scalatra のドキュメントで説明されている同等のもの) であり、 and を含むuser.id場合user.birthday、最初に anUserが ID によって取得され、次にその誕生日が更新され、最終的にコントローラーで利用可能になり、呼び出しの準備が整います。User.save()

ご覧のとおり、これにはモデル ライブラリ、バインディング ライブラリ、およびランタイムでのグルー サポートが必要です。

HTML フォームを生成するには、モデルを検査して HTML ビットを出力できるヘルパー ライブラリが必要です。たとえば、ライブラリがUserクラスを検査し、3 つのパブリック フィールドnamepasswordおよびがあることを検出し、入力の名前としてbirthday使用する慣例に従って、出力を検出するとします。<model>.<property>

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

ご了承ください

  • URL とメソッドは、何らかのコンテキスト (ルートなど) が学習された後にのみ入力できます。
  • Userこのフォームから送信されたオブジェクトを逆シリアル化するには、バインド ライブラリで同じ命名規則を使用する必要があります。

すべての部品を組み立てたら、MVC フレームワークを作成したことになります。では、Scalatra のような小さな RESTful ソフトウェアを使用する意味は何ですか?

于 2012-09-22T15:34:39.873 に答える