1

Spring 3 と JSF 2 を使用してアプリを作成しています。 https://github.com/michail-nikolaev/primefaces-spring-scopesのカスタム ViewScope 実装を使用しました。カスタムスコープを登録しました。

問題は、ビュー スコープ Bean が使用されているページにアクセスしようとすると、次の例外が発生することです。

INFO - ViewScope - Creating bean {editUser}
INFO - EditUser - EditUser() - class[com.myapp.beans.EditUser@f0ac4], rewId[null]
INFO - ViewScope - registerDestructionCallback for bean editUser
INFO - ViewScope - Session event bound sessionBindingListener
INFO - ViewScope - Bean created {com.myapp.beans.EditUser@f0ac4}
2013-03-18 00:30:30 com.sun.faces.lifecycle.ProcessValidationsPhase execute
WARNING: /editUser.xhtml @10,78 value="#{editUser.rewId}": The class '$Proxy115' does not have the property 'rewId'.
javax.el.PropertyNotFoundException: /editUser.xhtml @10,78 value="#{editUser.rewId}": The class '$Proxy115' does not have the property 'rewId'.

Bean がセッション スコープの場合、すべて正常に動作します。

私はあなたの助けに感謝します。

4

2 に答える 2

0

これは ViewScope の問題です。ダミー バージョンが作成されます。こちらを参照してください: http://forum.primefaces.org/viewtopic.php?f=3&t=24082

于 2013-07-02T13:37:59.673 に答える
0

@Transactional注釈を処理するために生成された JDK ベースのプロキシによって引き起こされた問題のようです。

JDKプロキシは、クラスによって実装されたインターフェースに対してのみ作成されます(あなたの場合Serializable)。したがって、プロキシにはSerializableインターフェースからのメソッドしかありません(まったくありません)。

この問題を解決するには、(cglib を使用して) 別のプロキシ モードに切り替える必要があります。たとえば、次を使用します @EnableTransactionManagement(proxyTargetClass = true)cglib:cglib-nodep:2.2また、プロジェクトの依存関係に追加します。

于 2013-03-18T05:53:31.437 に答える