1. ホーム
  2. java

Strutsのタグの#、%、$記号の違いは何ですか?

2023-09-26 19:30:15

質問

Struts2を使っているのですが、以下のようにアクセスすると ValueStack 変数にアクセスする際に % を使うか # または $ . 正しいものを見つけるまで、すべて試してみるのです。

誰か説明してください。 の違いは何ですか?

どのように解決するのですか?

シャープ記号の使用

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

  • objectName : ValueStack(OGNLコンテキストにおけるデフォルト/ルートオブジェクト)内のオブジェクト(Actionプロパティなど
  • #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つの方法のうちの1つで行うことができます。

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

パーセント記号の使用

%{ OGNL expression } は、通常Stringリテラルとして解釈される属性を強制的に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>