RichFaces rich: panelMenu перестает работать, когда a4j: include'd - PullRequest
2 голосов
/ 25 февраля 2010

Из этого ранее заданного вопроса , я заметил, что когда я перемещаю rich:panelMenu (который прекрасно работает на странице index.jsp) в another.jsp, а затем включаю его в index.jsp при использовании тега a4j:include функция rich:panelMenu перестает работать.

Это ошибка?

РЕДАКТИРОВАТЬ 1

В ответ на код и после некоторого изолированного тестирования проблема, как представляется, связана с сосуществованием rich:dataTable в другой вкладке rich:tabPanel из панели управления.

Если мой index.jsp содержит простое меню панели по умолчанию, использующее демонстрационный код (в бине), оно работает должным образом:

<f:view>
    <rich:page pageTitle="title" 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="Node Select " />
                        <h:selectOneMenu id="nodes" value="#{MyBacking.chosenNode}">
                            <f:selectItems value="#{MyBacking.nodes}" />
                        </h:selectOneMenu>
                        <a4j:commandButton value="Retrieve"
                            reRender="panel,contentPanel"
                            onclick="this.disabled=true" oncomplete="this.disabled=false" />
                    </a4j:outputPanel>
                </a4j:form>
            </rich:toolBarGroup>
        </rich:toolBar>
<!-- added start -->
        <h:form id="form">
            <h:panelGrid columns="2" width="100%">
                <rich:panelMenu style="width:200px" mode="ajax"
                    iconExpandedGroup="disc" iconCollapsedGroup="disc"
                    iconExpandedTopGroup="chevronUp" iconGroupTopPosition="right"
                    iconCollapsedTopGroup="chevronDown">
                    <rich:panelMenuGroup label="Group 1">
                        <rich:panelMenuItem label="Item 1.1"
                            action="#{PanelMenu.updateCurrent}">
                            <f:param name="current" value="Item 1.1" />
                        </rich:panelMenuItem>
                    </rich:panelMenuGroup>
                </rich:panelMenu>
                <rich:panel bodyClass="rich-laguna-panel-no-header">
                    <a4j:outputPanel ajaxRendered="true">
                        <h:outputText value="||#{PanelMenu.current}|| selected"
                            id="current" />
                    </a4j:outputPanel>
                </rich:panel>
            </h:panelGrid>
        </h:form>
<!-- added end -->
        <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>

Но если я удалю добавленное panelMenu из этого файла и вставлю его в отдельную вкладку в tabPanel на внешней странице JSP, которая затем будет a4j:include d в приведенном выше index.jsp, когда он загружен panelMenu отказывается работать (ничего не выводя в журнал или консоль), в то время как на другой вкладке в моем наборе вкладок есть rich:dataTable. С точно таким же кодом, но с удаленным со второй вкладки dataTable все снова начинает работать.

Вот сломанный a4j:include d файл с panelMenu:

<h:panelGrid columns="1" border="0" style="width: 100%">
    <rich:tabPanel switchType="client" rendered="true">
        <rich:tab styleClass="tab" label="Node Logs">
            <h:panelGrid columns="2" border="0">
                <h:graphicImage value="/btn50.png" width="30" height="30"
                    alt="Logs" />
                <h:outputText value="log: #{MyBacking.chosenNode}"
                    styleClass="pageTitle" />
            </h:panelGrid>

            <h:form id="form">
                <h:panelGrid columns="2" width="100%">
                    <rich:panelMenu style="width:200px" mode="ajax"
                        iconExpandedGroup="disc" iconCollapsedGroup="disc"
                        iconExpandedTopGroup="chevronUp" iconGroupTopPosition="right"
                        iconCollapsedTopGroup="chevronDown">
                        <rich:panelMenuGroup label="Group 1">
                            <rich:panelMenuItem label="Item 1.1"
                                action="#{PanelMenu.updateCurrent}">
                                <f:param name="current" value="Item 1.1" />
                            </rich:panelMenuItem>
                        </rich:panelMenuGroup>
                    </rich:panelMenu>
                    <rich:panel bodyClass="rich-laguna-panel-no-header">
                        <a4j:outputPanel ajaxRendered="true">
                            <h:outputText value="||#{PanelMenu.current}|| selected"
                                id="current" />
                        </a4j:outputPanel>
                    </rich:panel>
                </h:panelGrid>
            </h:form>

        </rich:tab>

        <rich:tab styleClass="tab" label="Docs">
            <rich:dataTable value="#{MyBacking.MyData}">
                <rich:column style="text-align:center" width="150px">
                </rich:column>
            </rich:dataTable>
        </rich:tab>
    </rich:tabPanel>
</h:panelGrid>

Спасибо

1 Ответ

1 голос
/ 03 марта 2010

Эта проблема исчезла, когда я преобразовал объявления taglib как

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:a4j="http://richfaces.org/a4j"
    xmlns:rich="http://richfaces.org/rich">

вместо использования тегов <% %> (которые в любом случае не используются с Facelets)

и установлено jsf-facelets-1.1.14.jar. До этого момента фляги не были установлены!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...