問題タブ [spring-mvc-initbinders]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
spring-mvc - Spring MVC: Request Scope、binder.setDisallowedFields でコマンド オブジェクトを更新しようとしています
私はこのオブジェクトを持っています
次のコントローラーのメソッドがあります
ここまでは、コントローラーがフォームを作成 (GET) し、新しい コマンドオブジェクトを送信 (POST) できるようになるまで、Validation
コードはうまく機能します。
問題はアップデートにあります。
私は次のものを持っています:
私が持っていることを観察しますbinder.setDisallowedFields("id")
問題は:
- フォームまたはコマンドにエラーがある場合、コントローラーはビューを再レンダリングし、フォームが表示され、エラーメッセージがどのように予想されるかを示しますが、ID 値はありません
また
- オブジェクトを更新しようとすると、もちろん id 値を保持し、エラーなしで単に更新を続行すると失敗します
コンソールに次のように表示されます。
IDがヌルです。Request Scopeを維持するこの問題を回避するにはどうすればよいですか?
動作している代替コントローラーがあり@SessionAttributes
、すべてが完璧に機能します。しかし、ユーザーが同じ Web ブラウザーで多くのタブ (1 つは作成用、もう 1 つは更新用) を開いていると、大きなリスクになるため、すべてが非常に間違ったものになります。Spring MVC + セッション属性と複数のタブに従って、セッション スコープの代わりにリクエスト スコープを使用する必要があります。意味があります。
悲しいことに、Spring はこれを修正しないようです: @SessionAttributes はタブ ブラウジングでは機能しません
添加
あなたの提案によると、私は以下を持っています:
メソッドの使用を観察してください@RequestParam
。私の問題は、更新する URL が次のスタイルの場合に、そのメソッドを更新して機能させる方法
http://localhost:8080/spring-utility/deportista/1/actualizar.htm
です。URL にパラメーターがないため、現在は役に立ちません@RequestParam
。
私はすでにSpring Referenceのドキュメントを読んでいます: Using @ModelAttribute on a method
2回目の加算
はい、あなたは正しかったです。私は昨日それを行いましたが、次のことを共有するのを忘れています。
a@ModelAttribute
はどのメソッドでも常に前に呼び出されるためhandler
、次の URL は失敗http://localhost:8080/spring-utility/deportista/registrar.htm
し、ページに次のように表示されます。
もちろん、URL に予期されるid
. したがって、後で編集/表示するために新しいレコードを作成することはできません。
次の作業について確認できます。
http://localhost:8080/spring-utility/deportista/1/detalle.htm
http://localhost:8080/spring-utility/deportista/1/actualizar.htm
ID (1) が取得されます。
どうすればこれを解決できますか?
ありがとうございました
spring - Spring/initBinder - 複数の値が選択されている場合にバインドされた値を取得できない
以下のコードは、miniApple の単一の値を保存しようとすると正常に動作します。コントローラーの引数、つまりappleでminiAppleオブジェクト値の値を確認できます。ただし、複数の値がある場合はバインドできません。文字列 (カンマ区切りの値) をカスタム オブジェクトのリスト (ここでは MiniApple のリスト) に変換するために initBinder メソッド内に記述する構文がどうあるべきかわからない
複数の値を選択すると、setAsText() のテキスト値をコンマ区切りの値にすることができます (例: "miniApple1, miniApple2,miniAPlle3")
コントローラーメソッド save()
Init Binder メソッド
setAsText メソッドを持つカスタム エディター クラス
コントローラの save() メソッドの引数としてバインドされた値を取得するオブジェクト
spring-mvc - Spring MVC モデル属性のネストされたプロパティの名前を変更する
私は次のフォームを持っています:
model
おそらくadvertisement
バインディングが発生したときに 、名前を付けたプロパティの名前を別の名前に変更しadvertisement
て、ビュー内のように参照できるようにしたいと思います(タイムリーフなど)。
これは Spring MVC を使用して可能ですか?
編集1:これが私のアプリケーションのAbstractForm
クラスです:
Java 部分で非常にきちんとした Generics を使用していることがわかります。model
ただし、ビューでプロパティの名前をカスタマイズしたいので、私の質問です。
spring - java BeanのPropertyEditorはステートフルですか?
Spring でのデータ バインディングを理解しているときに、PropertyEditors がステートフルであることを知りました。ここでステートフルとはどういう意味ですか?
ここにそのドキュメントのリンクがあります
java - タイプ「org.springframework.web.multipart.commons.CommonsMultipartFile」の値を必要なタイプに変換できませんでした
次のコントローラーメソッドがあります。
次のスタックトレースが表示されます。
OnlyForImagesFileWrapper ソース:
問題を回避するには?
マルチパート ファイルのこのコントローラー メソッドの変換ポリシーはどこで設定できますか?
PS
カスタムinitbinderを作成しようとしました:
しかし、フォームを送信してもこのメソッドは呼び出されず、上記のスタックトレースが表示されます。
PS
M. Deinum命令の実行後の結果(saveTerminal
メソッド内の場合):
また、initbinder メソッドが呼び出されないことに気付きました。
私のコードの詳細(M. Deniumのアドバイス後の状態):
jsp:
コントローラーメソッドの引数: