0

複数のp:tabがあるp:tabViewコンポーネントを使用しています。p:tabの1つには、rowTogglerを含む列を保持するデータテーブルが含まれています。

<p:column style="width:4%">
    <p:rowToggler />
</p:column>

そして別のp:rowExpansion:

<p:rowExpansion>
      <p:graphicImage id="thumbnailImage" value="/api/downloadFile/thumb/#{item.revisionId}"/>
</p:rowExpansion>

レンダリングされたデータテーブルのいずれかの行で行トグルをクリックすると、必要に応じて画像を取得するだけでなく、tabView内の各タブも再レンダリングされることに気付きます。これにより、サーバーへの複数の不要な呼び出しが発生し、サーバーに余分な負荷がかかり、ユーザーエクスペリエンスとパフォーマンスに悪影響を及ぼします。たとえば、行が実際に拡張されるまで4秒待機します。

トグルイベントが波打ってすべてのタブが再レンダリングされるのを防ぐにはどうすればよいですか?

Primefaces4.0-SNAPSHOTを使用しています。

4

1 に答える 1

0

この動作は、選択したJSF実装(mojarra)がAJAXリクエストを処理する方法によるもののようです。

http://forum.primefaces.org/viewtopic.php?f=3&t=19101

多くの人がmojarraに対して実行しているときにアプリのパフォーマンスが低下し、その結果、JIRAの問題が発生しました。

http://java.net/jira/browse/JAVASERVERFACES-2334

悲しいことに、これは「解決策:設計どおりに機能する」で終了しました

JIRAのコメントによると、MyFaces JSF実装の方がはるかにパフォーマンスが高いため、現在、MyFacesJSF実装の使用に移行することを検討しています。

「好奇心から、添付ページをBeanでテストしました。

Mojarra ajaxの結果は平均1000ms、MyFaces ajaxの結果は平均50msであるため、差は非常に大きくなります。差異比率は、ajax以外のリクエストにも適用されます。」

于 2012-12-09T22:20:28.360 に答える