How to submit values in a pop-up panel?

我与影子孤独终老i 提交于 2019-12-10 07:01:33

问题


I have bean struggling to understand how to use the rich:popupPanel component in the right way. There are (at least not that I could find) few post about how to use the rich:popupPanel and how to submit values from it.

To make matter worse the panel seams to add (when checking the html) a hard coded "_content" to its component id name (to the div generated). I have tried to use aj4:region tag to partial render the complete form. But that didn't seamed to work, cause nothing where posted to managed bean. So now I have one option left, where the panel has its own form, outside the main one on the page.

I can see that the evaluation of the form (popup) values is happening, but not the execution of the bean function that persist the values (I see the POST request of the command button). The only reason I can think of at the moment, is that the pop-up panel use another bean to persist the values that the main form on the page (both of them are session scoped). I am thinking of omit the pop-up panel all together, since it seams so hard to make this work. Maybe its a well know secret, since it so few post about it. It behaves the same if if use componentController or only a a4j:commanLink.

How is it possible to submit values from a rich:popupPanel and invoke a backing bean function to persist the pop-up form values ?

Appreciate if someone can shed some light on this, greetings Chris.

I use Richfaces 4.0-final on 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>

回答1:


For what I have done I used to have the issue to got to submit twice only the first time.

To fix it the form got to be outside the popupPane. And also that the popupPanel should have the attibute domElementAttachment="form".

Example.

        <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>

I hope this helps.




回答2:


I think you got it right.. think of the pop-up as a regular page. To submit and close the pop-up, do something like this:

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

Hope this helps..



来源:https://stackoverflow.com/questions/7062931/how-to-submit-values-in-a-pop-up-panel

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!