問題タブ [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.

0 投票する
0 に答える
629 参照

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 アプリケーションに次のコマンド オブジェクトがあります。

そして、私が投稿しているフォームのコードは次のようになります。

これを修正する方法を教えてください。アドレスのセットをコマンド オブジェクトにバインドできますか?

0 投票する
1 に答える
221 参照

grails - 1 つのアクションで抽象クラスを複数回インスタンス化する

つまり、たとえば、抽象Petクラスと、その 3 つの具体的な実装があります。具象クラスと同様に、これらの人は共通のフィールドを共有し、独自のフィールドも持っています。たとえば、すべてが を持っていますが、鳥だけが を持っています。つまり、GSP が異なり、更新方法も異なります。CatDogBirdLegsWings

秘訣は、1 回のアクションで不確定数のインスタンスをインスタンス化し、検証し、永続化できる必要があるということです。簡単な実装は、基本的に次のとおりです。

create.gsp

PetCommand.groovy

PetController.groovy

もちろん、実際のアプリケーションでは、これはかなり厄介になり、抽象クラスを使用する目的を完全に無効にします。

Pet複数のインスタンスを一挙にバインドし、それらをループして更新するパラメータを渡すなどの方法はありますか? わかりません、この全体が非常に混乱しています。

コマンド オブジェクトは厳密に必要というわけではありませんが、Grails コントローラーの厄介な冗長性の多くを修正します。

0 投票する
1 に答える
47 参照

grails - コマンド オブジェクトの 1 つの制約は、別の結果をチェックできますか?

これは機能しない単純な例です。まだ検証されていない場合a、検証ブロック内で検証する方法があるかどうか疑問に思っています。b

私がそれがうまくいくと思った例:

注: このシナリオでは、nullobj.errors.hasFieldError('a')であっても false を返します。a

0 投票する
1 に答える
167 参照

spring-mvc - Spring MVC 2.5コマンドオブジェクトの値はフォーム送信時に変更されます

JSP の隠しタグであるコマンド オブジェクトに文字列変数があります。ボタンをクリックすると、この変数に値(例「テスト」)を設定し、フォームを送信します。

フォームの送信時に、Validator.validate() メソッドへのコントロールを取得します。このメソッドでは、コマンド オブジェクト内の変数の値が変更され、値にコンマが追加されます (例: "test,")。

私はJavaスクリプト側でデバッグをチェックしました.正しい値がそこの変数に設定されています(余分なコンマが追加されていません)が、バリデータに到達するとその値が変更されます.

他のすべての値が正しく設定されているのに、特定の変数値のみが変更される理由がわかりません。

これを修正する方法を提案してください

0 投票する
0 に答える
227 参照

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

このアクションの間、データベース クエリは実行されないため、回避策はこのケースをカバーしません。抽象ドメイン クラスをコマンド オブジェクトとして使用するにはどうすればよいですか?

0 投票する
1 に答える
350 参照

grails - インデックスが 255 より大きい場合、データ バインディングが機能しない

を使用してアプリケーションに取り組んでいますgrails version 2.3.9。そこで、チェックボックス付きのリストをレンダリングしています。ユーザーは任意の行を選択してページを送信できます。サーバー側では、コマンドオブジェクトを使用してデータをバインドしています。

私のコマンドオブジェクト--

意見 -

アクション -

このコードは正常に動作しています。しかし、ユーザーがインデックス (idx) 値が 255 より大きい行を選択すると、データ バインディングは機能しません。

リクエスト パラメータ --

[myDomains[256].id:66、myDomains[256]:[id:66]、アクション:myAction、コントローラー:myController]

私も試してみました

コマンドオブジェクトで、しかし同じ結果、データバインディングなし。

ここで何か間違ったことをしていますか?どうすればこれを修正できますか?

0 投票する
1 に答える
1187 参照

json - フィルターで request.JSON にアクセスした後の Grails 2.5.0 コントローラー コマンド オブジェクトのバインド

request.JSONGrails 2.5.0 コントローラー アクション メソッドでは、フィルターでアクセスされた場合、HTTP JSON 本体のプロパティがコマンド オブジェクト バインディングに使用されないようです。

何故ですか?私には意味がありません。

request.JSONフィルターで使用できるようにする方法はありますか? また、コマンド オブジェクトのバインディングにも使用できますか?