Как отправить значения во всплывающую панель? - PullRequest
3 голосов
/ 15 августа 2011

Я пытаюсь понять, как правильно использовать компонент rich: popupPanel . Есть (по крайней мере, что я не смог найти) несколько постов о том, как использовать rich: popupPanel и как передавать значения из него.

Что еще хуже, панель шва добавляет (при проверке html) жестко закодированный "_content" к имени его компонента (к сгенерированному div). Я пытался использовать тег aj4: region для частичной визуализации полной формы. Но это не сработало, потому что ничего не написано в управляемом бобе. Так что теперь у меня остался один вариант, когда панель имеет свою форму, вне основной на странице.

Я вижу, что происходит оценка значений формы (всплывающих окон), но не выполняется функция компонента, сохраняющая значения (я вижу запрос POST командной кнопки). Единственная причина, о которой я могу подумать в данный момент, заключается в том, что всплывающая панель использует другой компонент для сохранения значений, которые основная форма на странице (обе они имеют сессионную область). Я думаю о том, чтобы опустить всплывающую панель все вместе, так как она выглядит так трудно, чтобы сделать эту работу. Может быть, это хорошо известный секрет, поскольку в нем так мало сообщений об этом. Он ведет себя так же, если использовать componentController или только a4j: commanLink .

Как можно передать значения из rich: popupPanel и вызвать функцию вспомогательного компонента для сохранения значений всплывающей формы?

Ценю, если кто-то может пролить свет на это, привет Крис.

Я использую Richfaces 4.0-final на Glassfish 3.1

<h:form id="main_form">
<!-- Command for popup -->
<a4j:commandLink actionListener="#{userController.prepareCreateSysRequest}" oncomplete="#{rich:component('popup_sys_user_req_form:popup_sys_user_req')}.show(); return false;" 
                                     execute="@this" value="Request New Sector/Category" />

    ...
<a4j:commandButton action="#{projectController.Create}" ...>
</h:form>

<h:form id="popup_sys_user_req_form">
    <rich:popupPanel id="popup_sys_user_req" modal="true" autosized="true" resizeable="false">
        <f:facet name="header">
            <h:outputText value="New Project Request" />
        </f:facet>
        <f:facet name="controls">
            <h:outputLink value="#"
                          onclick="#{rich:component('popup_sys_user_req')}.hide(); return false;">
                X
            </h:outputLink>
        </f:facet>
        <h:panelGrid columns="2">
            <h:outputLabel value="Request New:" />
            <h:selectOneMenu id="sys_req_type" value="#{userController.selectedSysRequestType}" required="true" requiredMessage="Request Type is required" title="Request Type">
                <f:selectItems value="#{userController.getSysRequestTypeItems()}">
                </f:selectItems>
            </h:selectOneMenu>
            <h:outputLabel value="Description:" />
            <h:inputTextarea id="user_req_desc" value="#{userController.selectedSysUserRequest.description}" required="true" requiredMessage="Decription is missing" />
        </h:panelGrid>
        <a4j:commandButton action="#{userController.CreateSysUserRequest}" onclick="#{rich:component('popup_sys_user_req')}.hide(); return false;" execute="@form" render="popup_sys_user_req_form" value="Send Request" />
    </rich:popupPanel>
</h:form>

Ответы [ 2 ]

5 голосов
/ 10 июня 2012

За то, что я сделал, я имел обыкновение подавать заявку дважды только в первый раз.

Чтобы исправить это, форма должна находиться за пределами popupPane.А также, что popupPanel должен иметь attibute domElementAttachment = "form".

Пример.

        <h:form>
            <rich:popupPanel id="shipmentItemUpdateDialog" 
                             autosized="true"
                             domElementAttachment="form">
                <f:facet name="header">
                    <h:panelGroup>
                        <h:outputText value="#{shipmentBundle.shipmentItemDetailsHeader}" />
                    </h:panelGroup>
                </f:facet>
                <f:facet name="controls">
                    <h:commandLink>
                        <h:graphicImage value="/core/images/modal/close.png"/>
                        <rich:componentControl target="shipmentItemUpdateDialog" operation="hide" />
                    </h:commandLink>
                </f:facet>
                <h:outputText for="shipmentItemName"
                              value="#{coreBundle.requiredChar} #{shipmentBundle.shipmentItemName}"
                              />
                <h:inputText id="shipmentItemName" 
                             disabled ="false"
                             required ="true"
                             value="#{shipmentItemController.shipmentItemUI.value.name}" 
                             label="#{shipmentBundle.shipmentItemName}"
                             size="40" >
                </h:inputText>  

                <h:outputText for="shipmentItemCode"
                              value="#{coreBundle.requiredChar} #{shipmentBundle.shipmentItemCode}"
                              />
                <h:inputText id="shipmentItemCode" 
                             disabled ="false"
                             required ="true"
                             value="#{shipmentItemController.shipmentItemUI.value.code}" 
                             label="#{shipmentBundle.shipmentItemCode}"
                             size="40" >
                </h:inputText>         

                <h:outputText value="#{coreBundle.requiredChar} #{shipmentBundle.shipmentItemAmount}"
                              />
                <h:inputText id="shipmentItemAmount" 
                             disabled ="false"
                             required ="true"
                             value="#{shipmentItemController.shipmentItemUI.value.amount}" 
                             label="#{shipmentBundle.shipmentItemAmount}"
                             size="4" >
                    <f:validateLongRange minimum="1"/>
                </h:inputText>      


                <h:outputText value="#{coreBundle.requiredChar} #{shipmentBundle.shipmentItemNeedsCooling}"
                              />
                <h:selectBooleanCheckbox id="shipmentItemNeedsCooling" 
                                         disabled ="false"
                                         required ="true"
                                         value="#{shipmentItemController.shipmentItemUI.value.needsCooling}" 
                                         label="#{shipmentBundle.shipmentItemNeedsCooling}"
                                         />                    

                <h:outputText for="shipmentItemDetails"
                              value="#{shipmentBundle.shipmentItemDetails}"
                              />
                <h:inputTextarea id="shipmentItemDetails" 
                                 disabled ="false"
                                 required ="true"
                                 value="#{shipmentItemController.shipmentItemUI.value.details}" 
                                 label="#{shipmentBundle.shipmentItemDetails}"
                                 cols="38" 
                                 rows="5" 
                                 /> 
            </h:panelGrid>

            <h:panelGrid columns="1" dir="LTR">
                <h:panelGrid columns="2" dir="LTR">
                    <a4j:commandButton value="#{coreBundle.acceptButton}" 
                                       action="#{shipmentItemController.onUpdate()}"
                                       render="shipmentItemsTable">
                    </a4j:commandButton>
                    <h:commandLink value="#{coreBundle.closeLink}" 
                                   immediate="true">
                        <rich:componentControl target="shipmentItemUpdateDialog" operation="hide" />
                    </h:commandLink>
                </h:panelGrid>
                <h:outputText value="#{coreBundle.requiredText}"/>
            </h:panelGrid>
            </rich:popupPanel>              
        </h:form>

Надеюсь, это поможет.

1 голос
/ 15 августа 2011

Я думаю, что вы поняли это правильно .. думайте о всплывающем окне как о обычной странице.Чтобы отправить и закрыть всплывающее окно, сделайте что-то вроде этого:

<a4j:commandButton value="Save" onclick="#{rich:component('panelId}.hide();" render="..."/>

Надеюсь, это поможет ..

...