問題タブ [model-driven]
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.
java - JSP を使用しているときに、Struts 2 ModelDriven インターフェイスを使用して POJO のプロパティにアクセスする方法は?
インターフェイスを実装するアクション クラスがありModelDriven
ます。これModelDriven
は通常の POJO です。問題は、そのプロパティの 1 つが別のオブジェクトであることです。
私の ModelDriven is a object called
Person and my person has an attribute called
Address that is another object.
Address has regular properties such as
String ,
Long などを想像してみてください。
フォームを送信するときの JSP ではString
、 、int
、long
inなどの通常のプロパティPerson
はすべて正しくマップされますが、アドレスにマップする必要があるすべてのデータは正しくマップされません。
それが私がプロパティをマッピングしようとする方法です。名前のプロパティは正しく理解できますが、個人の住所にプロパティをマッピングする場合、このアプローチは機能しません。
私は何を間違っていますか?
やがて、私のAddress
プロパティはPerson
オブジェクトのインスタンス化で宣言されるので、決してnull
.
編集:要求に応じて、アクション ソースと DTO:
アクション:
メインクラスFakeDTO
:
クラスFakeFilterDTO
:
struts.xml
:_
は、 をproject-default
含む include struts-config.xml
and extendsstruts-default
パッケージに配置されますModelDrivenInterceptor
。このインターセプターとそこを通過するブレークポイントにブレークポイントを配置したため、それを保証できます。
前に例として使用した JSP は次のようになります。
会社のポリシーにより、実際のオブジェクトとその名前をコピー/貼り付けすることは許可されていません。しかし、それがアイデアです。
java - 実際のユーティリティ クラス オブジェクトのプロパティにエイリアス インターセプタを使用する方法
次のように、変数と変数を持つという名前のAction
クラスがあります。MyFirstClass
String
User
User
クラスにはとのString
変数がuserName
ありuserAge
ます。
私のAction
クラスはインターフェイスを実装しているため、クラスModelDriven
の変数はUser
リクエストで取得/設定する必要があります。
次のように設計されたJSPファイルもあります。
次のようにstruts.xml
設計されています。
私の問題は次のとおりです。
User
JSP ページのテキスト フィールドの名前がクラスのプロパティ名と一致しないためです。alias
このように、インターセプターを使用してアクションの対応するプロパティに要求パラメーターを設定することはできません。
drop-down-menu - Struts2 のモデル駆動型アクション クラスでドロップダウン リストを使用する
データベースからデータを入力して<s:select>
います。アクション クラスはモデル駆動型です。
以下は次のとおりです<s:select>
。
これは完全に機能します。
<s:select>
を実装する別のアクション クラスでこれが必要ModelDriven<ZoneTable>
です。
テーブル構造はシンプルですtransporter->zone_table->country->state->city
。これらのテーブル間には 1 対多の関係があります。
などにマップできるモデル駆動型のアクション クラスを実装ModelDrven<ZoneTable>
するにはどうすればよいでしょうか。Transporter
<s:select>
このようにやってもうまくいきません。transporterId
アクションクラスが実装されModelDriven<ZoneTable>
ており、最初のケースとは異なるため、送信時に値を設定しませんModelDriven<Transporter>
。
これは、モデル駆動型アプローチを使用して可能ですか?
編集:
ZoneTable.java
Zone.jsp
この投稿には既に多くのコードが含まれているため、ZoneAction.java
ここではアクション クラスを投稿しません。必要な場合は、こちらから入手できます。
java - 「クラス xxx で 'xxx' を設定中に予期しない例外がキャッチされました: 値 ['x', ] で式 'xxx' を設定中にエラーが発生しました
ModelDriven<Transporter>
クエリ文字列を介して実装するアクション クラスにいくつかのパラメーターを渡しています。
アクション クラスは次のとおりです。
サーバー端末に次のメッセージが表示されます。
ログ レベルは ですがSEVERE
、これらのパラメーターの値はアクション クラスで次のように使用できます。
edit()
メソッドで。
paramsPrepareParamsStack
を then に置き換えると、defaultStack
これらのメッセージは消えます。
のような式['DHL', ]
は配列を示します。ただし、モデル内の と は、タイプtransporterId
およびそれぞれです。transporterName
Long
String
私は何を間違っていますか?
java - POST リクエストは、Struts 2 の ModelDriven を使用してフォームの値をモデルにロードしません。
Struts 2 とのインターフェイスを使用して動的な Web アプリケーションを作成しようとしていModelDriven
ます。Struts1 を使用したことはありますが、Struts 2 での試みはこれが初めてです。
データベースに保存されている値からフォームを作成できますが、値を変更してデータベースを更新しようとすると、フォームの値がモデルに読み込まれません。
プロジェクト全体をここにアップロードしました(この時点で実行するには MySQL データベースが必要です)。
プロジェクトをロードしたら:
- に進み
http://localhost/Vikos/secure/user
ます。 - ログインページに移動します。次を入力
logon email = consumer@test.com
しpassword = password
ます。 User
データベースから入力されたフォームを含むページが表示されます。Last Name フィールドを更新して<Update>
ボタンをクリックすると、データベース内の値が更新されますが、値が返されません。
HTMLフォームからモデルに値を取得する方法は?
アップデート:
この投稿のタイトルを変更し、内容を少し修正して、何が起こっているかをより正確に説明しました。また、メソッドにいくつかのデバッグ コードを追加しましたUserAction.prepare()
。Struts2 は、パラメータ配列の最初の要素 ( ) ではなくUserModel
、文字列配列 ( ) を使用してプロパティをロードしようとしているようです。parmValues
correctVal
13:21:42.773 [http-bio-80-exec-7] エラー coxiParametersInterceptor
- 開発者への通知 (struts.devMode を false に設定して、このメッセージを無効にします): 'クラス com.codedeart.vikos.action.UserAction で 'email' を設定中に予期しない例外がキャッチされました: 値 '[Ljava.lang.String' で式 'email' を設定中にエラーが発生しました;@7e227c19'
13:21:42.775 [http-bio-80-exec-7] エラー coxiParametersInterceptor
- 開発者通知 (このメッセージを無効にするには、struts.devMode を false に設定します): 'class com.codedeart.vikos.action.UserAction で 'firstName' を設定中に予期しない例外がキャッチされました: 値 '[Ljava.lang.String で式 'firstName' を設定中にエラーが発生しました;@378da3ff'
13:21:42.776 [http-bio-80-exec-7] エラー coxiParametersInterceptor
- 開発者通知 (このメッセージを無効にするには、struts.devMode を false に設定します): 'class com.codedeart.vikos.action.UserAction で 'lastName' を設定中に予期しない例外がキャッチされました: 値 '[Ljava.lang.String' で式 'lastName' を設定中にエラーが発生しました;@3409d6d7'
13:21:42.778 [http-bio-80-exec-7] エラー coxiParametersInterceptor
- 開発者通知 (struts.devMode を false に設定して、このメッセージを無効にします): 'class com.codedeart.vikos.action.UserAction で 'middleName' を設定中に予期しない例外がキャッチされました: 値 '[Ljava.lang.String' で式 'middleName' を設定中にエラーが発生しました;@13b29db7'
更新 2:
この問題は、 Custom Type Convertersを使用して修正した他の人によって報告された問題と似ているようです。このチュートリアルに基づいて、カスタム型コンバーターを実装しようとしました。私のメソッドが起動していないため、実際に型変換を行う段階にはまだ達していませUserTypeConverter
ん。最新のコードを BitBucket にアップロードしました。
PS:
JSP とバックエンド Struts の実装に問題がありました。答えは、以下の Uchenna と Roman の両方から提供されたアドバイスに従うことです。私は BitBucket で自分のプロジェクトを更新し続けるので、他の人がこれらの間違いを犯す必要がなくなることを願っています。