76

私は Struts 2 を使用していますが、変数にアクセスするときにorを使用するかどうかValueStackがわかりません。正しいものが見つかるまで、すべてを試します。%#$

それらの違いは何ですか

4

3 に答える 3

113

# (ポンド記号) の使用

OGNL は、次のように ActionContext 内のオブジェクトを参照するために使用されます。

  • objectName: Action プロパティなど、ValueStack 内のオブジェクト (OGNL コンテキスト内のデフォルト/ルート オブジェクト)
  • #objectName: ActionContext 内にあるが ValueStack の外部にあるオブジェクト、具体的には...
    • #objectName: Struts2 データ タグを使用してデフォルトのアクション スコープで作成された ActionContext オブジェクト (たとえば、<s:set name="foo" value="'Testing'" />によって参照される<s:property value="#foo" />)
    • #parameters.objectName: リクエストパラメータ
    • #request.objectName: リクエスト スコープの属性
    • #session.objectName: セッション スコープの属性
    • #application.objectName: アプリケーション スコープの属性
    • #attr.objectName: ページ、リクエスト、セッション、またはアプリケーション スコープ内の属性 (この順序で検索)

上記のスコープ付きマップ参照 (パラメーター、要求、セッション、およびアプリケーション) は、次の 2 つの方法のいずれかで作成できます。

  • #scopeName.objectName また
  • #scopeName['objectName']

% (パーセント記号) の使用

%{ OGNL expression }通常は文字列リテラルとして解釈される属性の OGNL 評価を強制するために使用されます。

例:<s:property value="myProperty" default="%{myDynamicDefaultValue}" />

@ (アットマーク) の使用

@ 記号は、静的プロパティおよびメソッドへの参照を作成するために使用されます。Struts2 プロパティでこれを有効にする必要がある場合があることに注意してください。struts.ognl.allowStaticMethodAccess=true

例:

@my.package.ClassName@MY_STATIC_PROPERTY
@my.package.ClassName@myStaticMethod

$ (ドル記号) の使用

Struts2 OGNL はドル記号を特別に使用しません。ただし、通常の JSTL 式を評価するために使用できます。例えば:

Struts2: <h1><s:property value="#pageTitle" /></h1>
(と同等です...)
JSTL:<h1>${pageTitle}</h1>

于 2012-07-23T21:31:34.983 に答える
10

フレームワークは、標準のネーミング コンテキストを使用して OGNL 式を評価します。OGNL を扱う最上位のオブジェクトはマップです (通常、コンテキスト マップまたはコンテキストと呼ばれます)。OGNL には、コンテキスト内にルート (またはデフォルト) オブジェクトが存在するという概念があります。式では、ルート オブジェクトのプロパティは、特別な「マーカー」の概念なしで参照できます。他のオブジェクトへの参照はシャープ記号 (#) でマークされます。

フレームワークは、OGNL コンテキストを ActionContext に設定し、値スタックを OGNL ルート オブジェクトに設定します。(値スタックはいくつかのオブジェクトのセットですが、OGNL には単一のオブジェクトのように見えます。)フレームワークは、値スタックに加えて、アプリケーション、セッション、および要求コンテキストを表すマップなど、他のオブジェクトを ActionContext に配置します。これらのオブジェクトは、値スタック (OGNL ルート) と一緒に ActionContext に共存します。

                 |
                 |--application
                 |
                 |--session
   context map---|
                 |--value stack(root)
                 |
                 |--request
                 |
                 |--parameters
                 |
                 |--attr (searches page, request, session, then application scopes)

詳細についてはこれを参照してください

OGNLベース

基本的に、struts2 はオブジェクト値スタックを最上位のオブジェクトとして配置し、OGNL を使用してそれらを参照します。ルート オブジェクトは、特別な「マーカー」なしで、または%他のオブジェクトへの参照がポンド記号 (#) でマークされている間参照できます。# は基本的に、アプリケーション/セッションなどからオブジェクト/値を参照するために使用されます。

于 2011-11-04T10:37:40.657 に答える
0

@Devon Biere を完了するためだけに ...

$ (ドル記号) の使用

${}リソースファイルでも使用できます。ストラットは自動的に OGNL を使用して解析し${}ます。例えば

sample.foo.bar=This is some ${someProperty} //If the someProperty is in valueStack
sample.welcome.message=Welcome dear ${#session.CurrentUser.farsiFirstName}

ここでの記号は、Struts に OGNL に対して文字列を評価するように要求する単なるトリガーであることに注意してください。JSTL$と混同しないでください。${}

OGNL を使用した Struts 2 動的メッセージ

于 2015-09-08T04:25:03.817 に答える