1

マニングの本Struts2 in Action page 106では、次のように言及されています

これを図 5.1 で見ると、式はもっと のようなものにする必要があると思うかもしれませんmyAction.user.username。逆に、必要なのは user.username だけです。これは、ValueStackが含まれているオブジェクトのプロパティを独自のものとして公開する一種の仮想オブジェクトであるためです。

そして同じ行でそれはまた言います

重複するプロパティが存在する場合 (スタック内の 2 つのオブジェクトが両方とも name プロパティを持っている場合)、スタック内の最上位のオブジェクトのプロパティが、 で表される仮想オブジェクトで公開されるプロパティになりますValueStack

最初の段落で説明したように使用できるかどうかは疑問ですがuser.username、クラスは異なるが別のユーザー名が存在する可能性があります。これも構文でアクセスできobjectname.userます。では、なぜ彼らは重複したプロパティの問題に言及しているのでしょうか?

4

1 に答える 1

0

値スタックは、 、、またはStackを使用して上部でアクセスできるオブジェクトのコレクションのように見え、OGNL の XWork 拡張による複合ルートであるルートを持っています。push()pop()peek()

XWork が OGNL の上に提供する最大の追加機能は、ValueStack のサポートです。OGNL は「ルート」が 1 つしかないことを前提として動作しますが、XWork の ValueStack の概念では、多くの「ルート」が必要です。

この複合ルートには、値が見つかるまで、式の評価中にスタックを上 (0-index) から下 (size()-1) までトラバースする「ルート」のリストがあります。したがって、各ルートにはたとえば値を含めることができますuser.usernameが、最初に見つかった値が返されます。問題は、他の「ルート」にある重複したプロパティにアクセスする方法です。解決策は、インデックスによってルートにアクセスすることです。たとえば、最上位オブジェクトには接頭辞が付いており[0].[1].前にプッシュされたオブジェクトなどです。これが、OGNL が値スタックで機能する方法です。モデル駆動型が実装されているときにアクション Bean のプロパティにアクセスしようとしていた例も見ることができます

参考文献:

于 2014-09-11T17:25:44.077 に答える