rich: modalpanel не будет отображать больше, чем при вызове из формы - PullRequest
1 голос
/ 19 ноября 2010

У меня проблема с отображением <rich:modalPanel> более одного раза. У меня есть форма, которая имеет <a4j:commandlink onclick="#{rich:component('mp')}.show()" (также попробовал rich:componentControl).

Этот подход отлично работает один раз. Внутри модальной панели у меня есть новая форма с некоторым действием, прикрепленным к кнопке отправки (a4j:commandButton). Когда это действие завершается, модальная панель скрывается с использованием того же подхода, что и выше с oncomplete="#{rich:component('mp')}.hide()", и форма, содержащая командную ссылку, перерисовывается.

Теперь проблема в том, что commandLink для отображения модальной панели больше не работает. Если я добавлю js alert('something') в событие onclick, я могу заметить, что событие onclick сработало, но модальная панель не отображается.

Надеюсь, это достаточно информации ... Я могу добавить немного исходного кода позже, если это необходимо

Спасибо

редактирование: вот еще немного кода:

<a4j:form prependId="false" ajaxSubmit="true">
    <a4j:outputPanel id="createActivityPanel">
        <h:panelGrid columns ="2">
            <h:outputLabel value="#{msg.createActivityExpectedParticipantsLabel}" />
            <h:panelGrid columns ="2">
                <h:outputLabel value="#{msg.createActivityAvailablePointsLabel}: #{sessionBean.loggedInUser.letspoints}" />
                <a4j:commandLink value="#{msg.createActivityGetMorePointsLinkLabel}" onclick="#{rich:component('convertPointsPanel')}.show()" />
                <rich:inputNumberSlider id="participantsSlider" value="#{activityRequestBean.newActivityExpectedNoParticipants}" maxValue="#{activityRequestBean.maxNoParticipants}" />
           </h:panelGrid>
       </h:panelGrid>
   </a4j:outputPanel>
</a4j:form>
<rich:modalPanel rendered="#{sessionBean.loggedIn}" id="convertPointsPanel" width="700" height="400">
    <a4j:support event="onhide" reRender="createActivityPanel"></a4j:support>
    <f:facet name="header">
        <h:outputText value="Velg poeng fra kategorier for å konvertere" />
    </f:facet>
    <f:facet name="controls">
        <a4j:form><a4j:commandButton id="closeButton" onclick="#{rich:component('convertPointsPanel')}.hide()" type="image" image="/img/close.gif"/></a4j:form>
    </f:facet>
    <a4j:form prependId="false" ajaxSubmit="true" id="convertPointsForm">
        <h:panelGrid columns ="2">
            <h:panelGroup layout="block" style="width:350px; float:left;">
                <rich:dataList var="catscore" value="#{pointsRequestBean.scores}" id="activityPointSliderList">
                    <h:graphicImage height="30" width="30" value="#{catscore.usercategoryscore.category.imagepath}" />
                    <h:outputText value="#{catscore.usercategoryscore.category.name}" />
                    <rich:inputNumberSlider maxValue="#{catscore.usercategoryscore.score}" value="#{catscore.transferredScore}" step="2" />
                </rich:dataList>
                <a4j:commandButton value="Konverter" id="convertButton" action="#{pointsRequestBean.convertPoints}" oncomplete="#{rich:component('convertPointsPanel')}.hide()" reRender="createActivityPanel"/>
            </h:panelGroup>
            <h:panelGroup layout="block" style="width:350px; float:right; border-left: 1px solid #ACBECE; padding: 10px;">
                <h:outputText value="kjøp poeng fra paypal?" />
            </h:panelGroup>
        </h:panelGrid>
    </a4j:form>
</rich:modalPanel>

Обратите внимание, что я следовал совету по перерисовке панели вместо формы.

1 Ответ

2 голосов
/ 19 ноября 2010

Не могли бы вы опубликовать код XHTML?

По сути, одна из ваших проблем может быть связана с тем, что вы повторно заполняете форму. Вообще, это не очень хорошая идея. Одним из решений является включение <a4j:outputPanel> и повторная визуализация этой панели вместо самой формы.

Таким образом, вместо:

<a4j:commandButton ... reRender="myForm"/>
<h:form id="myForm">
    ...
</h:form>

Вы можете сделать:

<a4j:commandButton ... reRender="myFormContent"/>
<h:form id="myForm">
    <a4j:outputPanel id="myFormContent">
        ...
    </a4j:outputPanel>
</h:form>

Если это не работает, пожалуйста, добавьте больше кода в свой вопрос.

...