0

約 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 は解決しません。

誰かがここで私を助けてくれることを願っています...

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

バントスペクト

4

2 に答える 2

0

パネルを切り替えるだけでよい場合は、これを使用<a4j:commandLink>して実行範囲を制限できます (フォーム全体が送信されません)。または、コマンド コンポーネントを完全に削除して、togglePanel の JavaScript API のみを使用することもできます。

<a onclick="#{rich:component('panelId')}.switchToItem(#{rich:component('panelId')}.nextItem())">Next</a>
于 2015-03-09T16:30:33.070 に答える