1

私はリッチフェイス 3.3.3.Final を Seam と facelet で使用しています。

アプリケーションにプロファイラーをプラグインしましたが、奇妙な動作をしています。アプリケーションによってスローされたすべての例外をログに記録すると、10 分間で 10,000 を超える NoSuchFieldElementException が発生します。

多くの検索の後、私は問題を見つけました:

a4j:support によって ajax リクエストを開始すると、次の行 (199 ~ 202) で AjaxChildrenRenderer によって NoSuchFieldElementException がスローされます。

String componentType = (String) component.getClass().getField("COMPONENT_TYPE").get(null);
result = _specialComponentTypes.contains(componentType);

コンポーネント変数は UIInstructions であり、「COMPONENT_TYPE」フィールドはありません。したがって、例外は正常です。この例外は、ページに含まれる各 html ブロッ​​クに対してスローされます。例えば:

<h2>Test</h2>
<span></span>

html タグでブロックを再レンダリングすると、例外がスローされます。私は非常に複雑なページを持っているので、この例外の多くが発生します。

この例外を回避するにはどうすればよいですか? html ブロッ​​クのこのクラスに入るのを避けるためのパーサー オプションである可能性があります。

ご協力いただきありがとうございます。

4

1 に答える 1

1

一時的な解決策として、ソース コードを変更して、そのブロックをスキップするチェックを追加しinstanceof、変更されたソース コードを Web アプリケーションと共に出荷することができます。Web プロジェクト自体で同一のパッケージ/クラス名を持つ単一のクラス (適切に javadoc 文書化) として出荷するか、JAR 内のクラスロードよりもクラスロードが常に優先されます。または、変更され再構築された JAR ファイルとして出荷されます。

if (!(component instanceof UIInstructions)) {
    String componentType = (String) component.getClass().getField("COMPONENT_TYPE").get(null);
    result = _specialComponentTypes.contains(componentType);
}

永続的な解決策として、RichFaces 担当者にパフォーマンスの問題として報告して、修正して新しい更新をリリースしてもらう必要がありますが、3.3.x の更新をそれほど優先するとは思いません。つまり、予想よりも時間がかかる場合があります。

于 2012-04-21T12:26:23.077 に答える