1

Spring MVC と Hibernate で Web Flow 2.0.7 を使用しています。

私の問題は、コンバーター内からのカスタム型とデータベース接続のカスタム コンバーターに関するものです。

タイプPersonがあり、そのPersonにカスタムタイプTitleのフィールドがあり、すべてのタイトルが既にデータベースにあるとします。これで、選択ドロップダウン ボックスでタイトルを選択するなど、ユーザーがPersonインスタンスを入力できる html フォームができました。

フロー定義では、データベースからすべてのタイトルを取得し、カスタム コンバーターを使用してドロップダウン ボックスに表示し、TitleStringに変換し、後でTitleに戻します。

私の質問は、String (要素の値として設定したデータベース ID) からデータベースの正しいTitleオブジェクトに変換するプロセスについてです。基本的に:それを行う方法は?

これまでのところ、データベースにアクセスするために titleManager をコンバーターに挿入することはできませんでした。このシナリオは、Spring Web Flow Forumでコメントされました。別の解決策として、ビューをレンダリングする前にタイトルをキャッシュし、フォームが POST された後に何らかの方法でメモリ内のタイトルを取得することが考えられます。

この種のデータバインディングを処理する方法を教えていただければ幸いです。これまでのところ機能させることができなかったので、それ以外の場合は素晴らしい Webflow を最小限しか使用できません。

すでにWeb Flow Board にスレッドを投稿しましたが、ベスト プラクティスがなく、自分では見つけることができません。

どうもありがとう!

ウルフラム

4

2 に答える 2

1

私はこれを行うために使用します。基本的に、タイトルのリストをロードして、フォーム モデルに配置します。フォーム モデルには、選択した項目の値を格納するための currentTitleId または selectedTitleId 変数もあります。このフィールド名はスプリングコンボボックスの「パス」に設定され、タイトルリストは「アイテム」に設定されます。次に、バインドする値を「itemValue」に設定し、その値に対して表示されるテキストを「itemLabel」に設定します。それでおしまい。

私のフォームモデルでは:

private int currentTitleId;
public long getCurrentTitleId() { return this.currentTitleId; }
public void setCurrentTitleId(long currentTitleId) { this.currentTitleId = currentTitleId; }

List titleList = getTitlesFromMyDatabaseHereOrSomewhereElse();

私のjspで:

<form:label path="currentTitleId">Title</form:label>
<form:select path="currentTitleId" items="${formModel.titleList}" itemLabel="titleDescription" itemValue="titleId" />

Title クラスは次のようになると思います。

class Title {
    public long getTitleId() { return this.titleId; }
    public long getTitleDescription() { return this.titleDescription; }
}

次のように、コンボボックスをもう少しカスタマイズすることもできます。

    <form:select path="currentPhoneNumberId">
    <form:option value="">-</form:option>
    <c:forEach items="${formModel.phoneList}" var="phone">
        <form:option value="${phone.phoneNumberId}">${phone.phoneNumberId} - ${phone.description}</form:option>
    </c:forEach>
</form:select>
于 2009-07-23T16:44:59.237 に答える
0

Spring Web Flowについてはよくわかりませんが、通常のSpring MVCでは、新しいPropertyEditorを登録するだけで十分で、これは自動的に機能します

http://static.springframework.org/spring/docs/2.5.x/reference/validation.html#beans-beans-conversion-customeditor-registration

http://static.springframework.org/spring/docs/2.5.x/reference/mvc.html#mvc-ann-webdatabinder

したがって、データベースからデータを取得するサービスまたは dao を取得する新しい PropertyEditor を作成し、PropertyEditor 内で ID をキー タイプに変換し、データベースから値を取得して返します。適切な例がありませんが、要点を理解していただければ幸いです。

于 2009-04-23T21:55:17.647 に答える