У меня есть установка JSF/RichFaces с index.jsp
, которая a4j:include
представляет собой другой фрагмент кода, содержащий rich:dataTable
.
Первоначально он отображается нормально, и выбор элемента в раскрывающемся списке index.jsp
и нажатие кнопки «Получить» a4j:commandButton
использует метод setChosen
вспомогательного компонента для выполнения ставок на серверной части. Компонент поддержки обновляет члены класса, чьи геттеры затем вызываются элементами чтения модели в отдельном файле content.jsp
, который называется a4j:include
d. Появится моя обновленная панель tabPanel.
Я вижу вывод в консоли eclipse. Но когда я снова нажимаю кнопку, ничего не происходит. Ничего в журнале tomcat 6.0 и ничего на консоли.
EDIT1 Сократив проблему до моего файла content.jsp
, а не приведенного выше кода index.jsp
, я обнаружил, что проблема заключается в элементе rich:dataTable
. Когда я удаляю только этот элемент из content.jsp
, я могу снова и снова нажимать кнопку «Получить», и моя панель вкладок перезагружается. Как только я вставляю его, первый щелчок в порядке, а затем кнопка нажимается, но ничего не происходит, и кнопка не отщелкивается обратно.
Метод, который предоставляет rich:dataTable
данные, не должен вызывать подозрений, поскольку он работает, по крайней мере, в первый раз, но он выполняет только некоторые подпрограммы xpath и возвращает ArrayList<MyDataList>
.
Учитывая редактирование, может ли кто-нибудь теперь предложить, как использовать rich:dataTable
, чтобы это не вызывало никаких проблем? Элемент находится внутри rich:tabPanel
, который находится внутри h:form
, но это все.
Спасибо
EDIT2: в ответ на прокомментированный ниже запрос ниже приводится полный список затронутых кодов, краткий, чтобы воспроизвести проблему. @ Дамо, обратите внимание, что a4j:commandButton
и rich:dataTable
находятся в разных файлах, поскольку последний находится в файле jsp, который имеет номер a4j:include
d. Также обратите внимание, что ссылки <%@ taglib uri=...
были удалены из обоих файлов.
index.jsp:
<f:loadBundle basename="messages" var="msg" />
<f:view>
<rich:page pageTitle="MyTitle" markupType="xhtml">
<h:outputText id="setup" value="#{MyBacking.setup}" />
<rich:toolBar height="35" itemSeparator="line">
<rich:toolBarGroup location="left">
<a4j:form>
<a4j:outputPanel id="panel">
<h:outputText style="text-align: center" value="Select " />
<h:selectOneMenu id="nodes" value="#{MyBacking.chosen}">
<f:selectItems value="#{MyBacking.nodes}" />
</h:selectOneMenu>
<a4j:commandButton value="Retrieve"
reRender="panel,contentPanel,currNode,lastOp"
onclick="this.disabled=true" oncomplete="this.disabled=false" />
</a4j:outputPanel>
</a4j:form>
</rich:toolBarGroup>
</rich:toolBar>
<rich:panel>
<h:panelGroup layout="block" id="contentPanel">
<a4j:include viewId="#{MyBacking.viewId}">
<f:param name="targetIdParam" value="content" />
</a4j:include>
</h:panelGroup>
</rich:panel>
</rich:page>
</f:view>
a4j:include
d content.jsp
:
<h:form id="myConfig">
<rich:tabPanel switchType="client" rendered="true">
<rich:tab styleClass="tab" label="Connections">
<rich:dataTable onRowMouseOver="this.style.backgroundColor='#F1F1F1'"
onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'"
cellpadding="0" cellspacing="0" width="100%" border="0" var="item"
value="#{MyBacking.DataList}">
<rich:column style="text-align:center" width="150px">
<h:outputText styleClass="txtBold"
value="#{item.info}:#{item.other}" />
</rich:column>
</rich:dataTable>
</rich:tab>
</rich:tabPanel>
</h:form>
Большое спасибо за то, что посмотрели это.
EDIT3 В соответствии с запросом я попытался инкапсулировать a4j:include
в h:form
. Чтобы включенный контент не вкладывался в форму h:, я заменил закрывающий тег h:form
в content.jsp
на h:panelGrid
. Когда я повторил это, второй щелчок по a4j:commandButton
все еще вызывал зависание, но я проверил с помощью firebug, и произошло POST http://localhost:8888/index.jsf 200 13ms
, но ответ был пустым. Это помогает?