У меня есть приложение JSF, которое создает и представляет около 50 отчетов. Эти отчеты отображаются PNG, а под изображениями отображается таблица.JSF слишком много commandLinks (h: form) приводит к ViewExpiredException
В этой таблице используется RichTaces 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 из-за проблем с памятью и потому, что это не обязательно, потому что одновременно отображается только один отчет.
Я попытался удалить теги h: form, которые рассматриваются как логический. На мой взгляд, togglePanel - это не тот элемент, который нуждается в форме, потому что это тип коммутатора - клиент (а не сервер и ajax, которым нужны теги формы). Но для командной строки нужен тег формы, потому что, если я удалю его, возникает ошибка, говорящая, что «эта ссылка отключена, поскольку она не вложена в форму jsf».
Поэтому я попытался заменить commandLink на commandButton. Сначала это сработало, и форма больше не нужна. Но почему-то поведение сейчас совершенно случайное. Иногда таблицы могут быть расширены, иногда ничего не происходит, когда я нажимаю кнопку «Развернуть». Когда я снова добавляю теги формы, он отлично работает, но не решает проблему ViewExpiredException.
Надежда, кто-то может помочь мне здесь ...
Спасибо за вашу помощь!
Buntspecht
Возможно, вы захотите использовать '', если вам нужно что-то свернутое. Но я вижу только 2 команды, как их слишком много? –
Makhiel
Это слишком много, потому что это всего лишь пример для одного из 50 загружаемых отчетов. Текущий выбранный отчет отображается в большем кадре, а остальные отчеты загружаются в виде миниатюр в виде предварительного просмотра. Таким образом, во всем есть около 100 commandLinks. – buntspecht
И вам нужно общаться с сервером? Потому что тогда вам не понадобятся командные ссылки. – Makhiel