2

PlayFramworkとJavaを使用してWebアプリケーションで作業しています。メインビューに単純なフォームを実装しようとしていますが、このビューでは別のテンプレートを追加しています。ビューにパラメータを渡すときに問題が発生します。エラーは次のとおりです。

型の不一致; 見つかった:play.data.Form.Field必須:play.data.Form [models.Document]

コードで説明させてください。

showUserView.scala.html/メインビューのコンテンツ

@(user: Form[User])

@import helper._
@import helper.twitterBootstrap._

@main("Test") {

<H1>SHOW USER</H1>


    @newUserView(user)

    @documentView(user("document"))

} 

問題は次の行にあります。

@documentView(user("document"))

newUserView.scala.htmlのコンテンツ/これは正常に機能しています

@(user: Form[User])

@import helper._
@import helper.twitterBootstrap._


<H2>User's Form</H2>

@inputText(
    user("name"), 
    '_label -> "Name: "
)

documentView.scala.htmlの内容/これが問題です...

@(doc: Form[Document])

@import helper._
@import helper.twitterBootstrap._


<H2>Document's Form</H2>

    @inputText(
        doc("number"), 
        '_label -> "Number: "
    )

フィールドなしのフォームを受け取るためにビューを準備しています...パラメータのタイプを変更したくありません。元のテンプレートを保持します。

それについて何か考えはありますか?FieldパラメータをForm[Document]に変換するにはどうすればよいですか?

4

2 に答える 2

1

コントローラで両方のモデルを作成して入力してから、メインビュー(showUserView.scala.html)に個別に渡す必要があります。

@(userForm: Form[User], documentForm: Form[Document])
@import helper._
@import helper.twitterBootstrap._

@main("Test") {
    <H1>SHOW USER</H1>
    @newUserView(userForm)
    @documentView(documentForm)
} 

ともかく...

Document's私が理解したように、そのような場合に入力されたコンテキストでいくつかのフィールドを編集したいのでUser、両方のサブビューに1つのフォーム(ユーザー)のみを使用し、データの保存/更新で関連するドキュメントを非表示のIDで検索します。

@(userForm: Form[User])
@import helper._
@import helper.twitterBootstrap._

@main("Test") {
    <H1>SHOW USER</H1>
    @newUserView(userForm)
    @documentView(userForm)
}

documentView.scala.html

@(userForm: Form[User])
@import helper._
@import helper.twitterBootstrap._

<H2>Documents Form</H2>
<input type="hidden" name="document.id" value='@userForm("document.id").value' >
@inputText(
   userForm("document.number"), 
   '_label -> "Number: "
)

したがって、ユーザーを保存している間、リクエストでドキュメントのIDと新しい番号を見つけて、次のデータでドキュメントを更新できます。

public static result saveUserAndDoc(){
    // save user as usually by binding the form...

    Integer documentId = Integer.valueOf(form().bindFromRequest().get("document.id"));

    Document document = Document.find.byId(documentId);
    document.number = Integer.valueOf(form().bindFromRequest().get("document.number"));
    document.update(documentId);
    return ok("User saved with changed document number);
}

もちろん、そのサンプルにはタグは含まれていません。<form></form>フィールドだけです。適切な場所に追加する必要があります。

于 2012-10-26T09:45:59.973 に答える
1

ドキュメントビューの結果として、フォームパラメータをフィールドパラメータに変更しました。

@(document : Field)

@import helper._
@import helper.twitterBootstrap._


<H2>Document type view!</H2>


@inputText(
   document("number"), 
   '_label -> "Number:"
)

showUserView.scala.html/メインビューのコンテンツ

@(user: Form[User])

@import helper._
@import helper.twitterBootstrap._

@main("Test") {

<H1>SHOW USER</H1>


@newUserView(user)

@documentView(user("user.document"))

} 

コントローラーでフォームを作成しています:

Form<User> userForm = form("user", User.class);

それは私にとって良いアプローチです。私はモデルを気にし、他のビューから切り離します。

于 2014-06-10T15:20:10.570 に答える