0

私が管理しているレガシー アプリの JSP ファイルで、次のマークアップを見つけました。

<logic:equal name="welcome memberInfoView" property="hasFoo" value="false">

その名前属性は私には非常に間違っているように見えます。Struts ドキュメントで読んだ内容に基づいて、そのスペースは許可されていません。

これは合法ですか?もしそうなら、それは何をしているでしょうか?そうでない場合、その意図は何だったのでしょうか?

EDIT:さらに検索したところ、「welcome memberInfoView」が実際に意図的に属性名として使用されていることがわかりました(スペース付き)。

4

1 に答える 1

2

実際、この名前は合法ですが、型破りです。構文的には合法ですが、実際にはバグである可能性があります。

「name」は、スクリプト変数名ではなく、何らかのスコープ (オプションの「scope」属性によって決定され、デフォルトは「any」) で属性名を指定します。これは事実上マップへのキーであるため、任意の文字列にすることができます。

このタグは、ページ コンテキストで開始され、「welcome memberInfoView」という名前の属性を探します。名前付きオブジェクトが見つかるまでスコープを囲み続けます。次に、そのオブジェクトの「hasFoo」プロパティを調べます。「false」の場合、囲まれたフラグメントが呼び出されます。

もう 1 つ間違っているように見えるのは、"hasFoo" プロパティです。通常、プロパティは単に「foo」であり、オブジェクトにはisFoo()orというアクセサが必要getFoo()です。おそらく、ロジック タグはこの点で寛容であり、hasFoo()メソッドを正常に呼び出すことができます。

この使用法に対して簡単なテストを作成し、意図したとおりに動作することを確認してください。

于 2008-11-25T23:33:08.203 に答える