次のように、JSP で静的メンバー値にアクセスしようとしています。
"@package.subPackage.ClassName@STATIC_MEMBER"
STATIC_MEMBER はpublic static final String
値が割り当てられたものとして宣言され、クラスにはパブリック スコープがあります。struts.properties (webapps\appName\WEB-INF\classes フォルダーの下に配置) にstruts.ognl.allowStaticMethodAccess=true
エントリがあります。しかし、Strutsstruts.ognl.allowStaticMethodAccess=true
は struts.properties のエントリを無視するようです。
別のプロジェクトで上記の同じ手順を実行しましたが、完全に正常に機能しています。
注:
1. 完全なパッケージ、クラス、および STATIC_MEMBER 名が正しいかどうかをクロスチェックしました。
2. ページにエラーや例外はありません。
3. 同じ JSP は、Action クラス ( <s:property value="actionMember"/>
) からメンバー値にアクセスできます。
4. 他のクラスから static メンバーにアクセスしようとしましたが、うまくいきません。
5. struts.properties ファイルを削除して、struts.xml ファイルの<struts>
タグの後に :
というエントリを作成しようとしました<constant name="struts.struts.ognl.allowStaticMethodAccess" value="true" />
。再起動して再試行しました。しかし、うまくいきません。
6. Web アプリとそのキャッシュ (作業フォルダー) をサーバーから削除した後、サーバーを再構築、再展開、再起動しましたが、機能しませんでした。
環境: Java 1.6、Struts 2.1、Tomcat 6.0 @ Windows XP 2002
助けてください。
よろしくお願いします!
--------------------コードの更新-------------------------------- ---
クラス
package package1.subPackage1;
public class FooClassName {
public static final int INVALID_LOGIN = 0;
}
struts.properties
struts.ognl.allowStaticMethodAccess=true
JSP
<s:if test="errorType == @package1.subPackage1.FooClassName@INVALID_LOGIN">
some code here
</s:if>
Action クラス:
1. private int errorType;
2. それぞれerrorType
の getter と setter があります。値を出力することすらありません。
<s:property value="@package1.subPackage1.FooClassName@INVALID_LOGIN"/>