a4j:included rich:dataTable негативно влияет на a4j:commandButton

У меня есть установка JSF/RichFaces с index.jsp, которая a4j:include представляет собой другой фрагмент кода, содержащий rich:dataTable.

Первоначально он отображается нормально, и выбор элемента в раскрывающемся списке index.jsp и нажатие кнопки «Получить» a4j:commandButton использует метод setChosen вспомогательного компонента для выполнения ставок на серверной части. Компонент поддержки обновляет члены класса, чьи геттеры затем вызываются элементами чтения модели в отдельном файле content.jsp, который называется a4j:included. Появится моя обновленная панель 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:included. Также обратите внимание, что ссылки <%@ 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:included 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, но ответ был пустым. Это помогает?


person volvox    schedule 10.02.2010    source источник
comment
проверьте консоль javascript firefox и журналы   -  person Bozho    schedule 10.02.2010
comment
опубликуйте свою страницу, чтобы мы могли видеть commandButton и datatable   -  person Damo    schedule 11.02.2010


Ответы (2)


Я часто сталкиваюсь с этим, когда перерендериваю commandButtons/Links.

Ваша форма a4j: фактически перерисовывает себя. Попробуйте изменить его на что-то вроде этого:

<a4j:form>
    <a4j:outputPanel id="panel">
        <h:outputText style="text-align: center" value="Select " />
        <h:selectOneMenu id="mySelect" value="#{MyBacking.chosen}">
            <f:selectItems value="#{MyBacking.myList}" />
        </h:selectOneMenu>
    </a4j:outputPanel>
    <a4j:commandButton value="Retrieve" reRender="panel"/>
</a4j:form>

ОБНОВЛЕНИЕ: переместите форму h:, чтобы заключить a4j:include. Почти уверен, что ему нужна форма, и, конечно, вы не можете вкладывать формы.

person Damo    schedule 11.02.2010
comment
Хороший ответ, но он не работает. Если я использую a4j:outputPanel, могу ли я игнорировать необходимость в a4j:form? - person volvox; 11.02.2010
comment
Интересный. Кнопка запускала каскадную работу bean-компонентов для выполнения разных задач. Я сузил его, чтобы он работал, как указано выше, нормально, если только bean-компонент не обновляет элемент, который a4j: включен на приведенную выше страницу, содержащий rich:dataTable. мне даже не нужно перерендерить a4j:include, чтобы показать содержимое включения. мне нужен навигационный контент Faces-config.xml для a4j: включенный контент? Я задам другой конкретный вопрос по этому поводу. - person volvox; 11.02.2010
comment
Извините, Дамо, я снял галочку, как это было, или повторите, по сути, тот же вопрос и получите пламя. Я не запускал исходный код без элемента dataTable, поэтому я думаю, что у меня было две проблемы, но, по сути, проблема у меня все еще есть. Вопрос имеет новое название. - person volvox; 11.02.2010
comment
Обновленный вопрос для включения h:form безрезультатно. - person volvox; 25.02.2010

Исправление состояло в том, чтобы установить банку Facelets. См. здесь.

person volvox    schedule 03.03.2010