問題タブ [command-objects]
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.
grails - Grails コマンド オブジェクトでドメイン オブジェクトのセットをバインドする
オブジェクトのセットを Grails コマンド オブジェクトにバインドしようとしていますが、現在は機能せず、エラーがスローされます。
Field error in object 'NewPersonCommand' on field 'addresses': rejected value [[Ljava.lang.String;@6d64b5fb]; codes [NewPersonCommand.addresses.typeMismatch.error,NewPersonCommand.addresses.typeMismatch,newPersonCommand.addresses.typeMismatch.error,newPersonCommand.addresses.typeMismatch,typeMismatch.NewPersonCommand.addresses,typeMismatch.addresses,typeMismatch.java.util.Set,typeMismatch]; arguments [addresses]; default message [Could not find matching constructor for: Address(java.lang.String)]>
Grails アプリケーションに次のコマンド オブジェクトがあります。
そして、私が投稿しているフォームのコードは次のようになります。
これを修正する方法を教えてください。アドレスのセットをコマンド オブジェクトにバインドできますか?
grails - 1 つのアクションで抽象クラスを複数回インスタンス化する
つまり、たとえば、抽象Pet
クラスと、その 3 つの具体的な実装があります。具象クラスと同様に、これらの人は共通のフィールドを共有し、独自のフィールドも持っています。たとえば、すべてが を持っていますが、鳥だけが を持っています。つまり、GSP が異なり、更新方法も異なります。Cat
Dog
Bird
Legs
Wings
秘訣は、1 回のアクションで不確定数のインスタンスをインスタンス化し、検証し、永続化できる必要があるということです。簡単な実装は、基本的に次のとおりです。
create.gsp
PetCommand.groovy
PetController.groovy
もちろん、実際のアプリケーションでは、これはかなり厄介になり、抽象クラスを使用する目的を完全に無効にします。
Pet
複数のインスタンスを一挙にバインドし、それらをループして更新するパラメータを渡すなどの方法はありますか? わかりません、この全体が非常に混乱しています。
コマンド オブジェクトは厳密に必要というわけではありませんが、Grails コントローラーの厄介な冗長性の多くを修正します。
grails - コマンド オブジェクトの 1 つの制約は、別の結果をチェックできますか?
これは機能しない単純な例です。まだ検証されていない場合a
、検証ブロック内で検証する方法があるかどうか疑問に思っています。b
私がそれがうまくいくと思った例:
注: このシナリオでは、nullobj.errors.hasFieldError('a')
であっても false を返します。a
spring-mvc - Spring MVC 2.5コマンドオブジェクトの値はフォーム送信時に変更されます
JSP の隠しタグであるコマンド オブジェクトに文字列変数があります。ボタンをクリックすると、この変数に値(例「テスト」)を設定し、フォームを送信します。
フォームの送信時に、Validator.validate() メソッドへのコントロールを取得します。このメソッドでは、コマンド オブジェクト内の変数の値が変更され、値にコンマが追加されます (例: "test,")。
私はJavaスクリプト側でデバッグをチェックしました.正しい値がそこの変数に設定されています(余分なコンマが追加されていません)が、バリデータに到達するとその値が変更されます.
他のすべての値が正しく設定されているのに、特定の変数値のみが変更される理由がわかりません。
これを修正する方法を提案してください
grails - Grailsでコマンドオブジェクトまたはコマンドオブジェクトのプロパティとして抽象ドメインクラスを処理する方法は何ですか?
Grails は、デフォルトでコマンド オブジェクトのプロパティとしてドメイン クラスをサポートします。Stuff
コマンドでドメイン クラスを使用できますが、抽象クラスのStuffCommand
場合は使用できません。Stuff
スタッフグルービー
StuffCommand.groovy
ExampleController.groovy
次に、リクエストはデータベースhttp://server:port/ctx/example/doStuffWithStuff?stuff=123
のテーブルからレコード #123 を取得しません。stuff
私はそのアプローチの簡潔な性質が大好きです。データベースに対するクエリは実行されないか、サイレントに失敗します。
ただし、次の回避策が少し役立ちます。
ValueConverter
抽象 comain クラスに変換するクラスを作成します。クラス名は で終わる必要がありValueConverter
ますが、それ以外は自由に名前を付けることができますIdStringToStuffValueConverter
。
IdStringToStuffValueConverter
これで、上記のリクエストを実行できるようになり、コントローラーはデータ バインディング中にデータベースに再度ヒットします。しかし、以下はまだ期待どおりに機能しません。
ExampleController.groovy
このアクションの間、データベース クエリは実行されないため、回避策はこのケースをカバーしません。抽象ドメイン クラスをコマンド オブジェクトとして使用するにはどうすればよいですか?
grails - インデックスが 255 より大きい場合、データ バインディングが機能しない
を使用してアプリケーションに取り組んでいますgrails version 2.3.9
。そこで、チェックボックス付きのリストをレンダリングしています。ユーザーは任意の行を選択してページを送信できます。サーバー側では、コマンドオブジェクトを使用してデータをバインドしています。
私のコマンドオブジェクト--
意見 -
アクション -
このコードは正常に動作しています。しかし、ユーザーがインデックス (idx) 値が 255 より大きい行を選択すると、データ バインディングは機能しません。
リクエスト パラメータ --
[myDomains[256].id:66、myDomains[256]:[id:66]、アクション:myAction、コントローラー:myController]
私も試してみました
と
コマンドオブジェクトで、しかし同じ結果、データバインディングなし。
ここで何か間違ったことをしていますか?どうすればこれを修正できますか?
json - フィルターで request.JSON にアクセスした後の Grails 2.5.0 コントローラー コマンド オブジェクトのバインド
request.JSON
Grails 2.5.0 コントローラー アクション メソッドでは、フィルターでアクセスされた場合、HTTP JSON 本体のプロパティがコマンド オブジェクト バインディングに使用されないようです。
何故ですか?私には意味がありません。
request.JSON
フィルターで使用できるようにする方法はありますか? また、コマンド オブジェクトのバインディングにも使用できますか?