約 50 件のレポートを作成して表示する JSF アプリケーションを使用しています。これらのレポートは PNG でレンダリングされ、画像の下にテーブルが表示されます。
このテーブルは、switchType="client" を指定した RichFaces 4 の togglePanel を使用しています。togglePanel は、テーブルを折りたたんだり展開したりするためのものです。
<h:form>
<rich:togglePanel id="#{param.reportWrapper}_togglePanel"
stateOrder="opened,closed" activeItem="opened" switchType="client">
<rich:togglePanelItem name="closed">
<h:panelGroup>
<div class="myclass">
<ul class="container-icons">
<li>
<h:commandLink styleClass="container-max" value="maximieren">
<rich:toggleControl targetPanel="#{param.reportWrapper}_togglePanel" targetItem="@next" />
</h:commandLink>
</li>
</ul>
<h3>My Heading</h3>
</div>
</h:panelGroup>
</rich:togglePanelItem>
<rich:togglePanelItem name="opened">
<h:panelGroup>
<div class="myclass">
<ul class="container-icons">
<li>
<h:commandLink styleClass="container-min" value="minimieren">
<rich:toggleControl targetPanel="#{param.reportWrapper}_togglePanel" targetItem="@prev" />
</h:commandLink>
</li>
</ul>
<h3>Another Heading</h3>
<div class="scrolling-table-content">
<rich:dataTable>
// ...
</rich:dataTable>
</div>
</div>
</h:panelGroup>
</rich:togglePanelItem>
</rich:togglePanel>
</h:form>
問題は、レポートの読み込み時に ViewExpiredExceptions が発生することがあることです。numberOfLogicalViews と numberOfViewsInSession は 14 です。50 に設定したくありません。これは、メモリの問題と、実際には同時に表示されるレポートが 1 つだけであるため必要ではないためです。
logicalView として表示される h:form タグを削除しようとしました。私の意見では、togglePanel はフォームを必要とするアイテムではありません。これは、スイッチ タイプがクライアントであるためです (フォーム タグが必要なサーバーと ajax ではありません)。ただし、コマンドリンクにはフォームタグが必要です。これを削除すると、「このリンクはjsfフォーム内にネストされていないため、無効になっています」というエラーが発生するためです。
そこで、commandLink を commandButton に置き換えてみました。これは最初はうまく機能し、フォームはもう必要ありませんでした。しかし、どういうわけか、動作は完全にランダムになりました。テーブルを展開できる場合もあれば、展開ボタンをクリックしても何も起こらない場合もあります。フォームタグを再度追加すると、正常に動作しますが、ViewExpiredException は解決しません。
誰かがここで私を助けてくれることを願っています...
ご協力いただきありがとうございます!
バントスペクト