a4j: включенный rich: dataTable отрицательно влияет на a4j: commandButton - PullRequest
1 голос
/ 10 февраля 2010

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

Первоначально он хорошо обрабатывается, и при выборе элемента в списке dropDown index.jsp и нажатии на кнопку «Получить» a4j:commandButton используется метод setChosen поддерживающего бина, чтобы делать ставки на бэкэнде. Поддерживающий компонент обновляет членов класса, чьи методы получения затем вызываются элементами чтения модели в отдельном файле content.jsp, который a4j:include d. Появится моя обновленная вкладка.

Я вижу вывод в консоли 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 : В ответ на комментарий с комментариями, приведенный ниже, ниже приведен полный список кода, на который влияют, настолько краткий, насколько будет воспроизведена проблема. @Damo, пожалуйста, обратите внимание, что 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 произошло, но ответ был пустым. Это помогает?

Ответы [ 2 ]

4 голосов
/ 11 февраля 2010

Я часто испытываю это, когда перезаписываю команду Кнопки / Ссылки.

Ваша форма 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. Уверен, что ему нужна форма и, конечно, вы не можете вкладывать формы.

0 голосов
/ 03 марта 2010

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

...