Отправить содержимое всплывающей панели, rich: popupPanel - PullRequest
1 голос
/ 11 августа 2011

Я пытаюсь отправить значения во всплывающей панели внутри другой панели с событием отправки / действия. Но перед открытием всплывающей панели мне нужно вызвать функцию в моем управляемом компоненте, которая создает новый объект сущности. Внешняя панель имеет только h: form , поскольку вы не можете их вкладывать. Я обернул всплывающую панель в a4j: region , чтобы передать только эту часть, когда пользователь отправляет значения внутри всплывающей панели. Это работает, но не выполнение функции подготовки, которая должна быть вызвана при выполнении всплывающей панели. Я пробовал a4j: commandLink , но этот компонент не работает вместе с rich: popupPanel (странно, поскольку оба они являются компонентами Richfaces ?!). Поэтому я должен передать h: commandLink и использовать ajax.

Как я могу вызвать функцию в моем управляемом компоненте, когда открывается ссылка на открытие / рендеринг всплывающей панели?

(Какой правильный шаблон для этого?)

PS. Исходный вопрос изменился, но не проблема с отправкой значений во всплывающей панели.

Часть файла xhtml:

<h.form>
...
<a4j:region>
      <rich:popupPanel id="popup_sys_user_req" modal="false" autosized="true" resizeable="false">
                        <f:facet name="header">
                            <h:outputText value="Request New Sector/Category" />
                        </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.selectedSysUserRequest.sysrequesttype}" required="true" >
                                <f:selectItems value="#{userController.getSysRequestTypeItems('SECTOR_CATEGORY')}">
                                </f:selectItems>
                            </h:selectOneMenu>
                            <h:outputLabel value="Description:" />
                            <h:inputTextarea id="user_req_desc" value="#{userController.selectedSysUserRequest.description(desc)}" required="true" requiredMessage="Decription is missing" />
                        </h:panelGrid>
                        <a4j:commandButton action="#{userController.CreateSysUserRequest()}" value="Send Request" execute="sys_user_req_form" oncomplete="#{rich:component('popup_sys_user_req')}.hide(); return false;"/>
                    </rich:popupPanel>
                </a4j:region>
</h:form>

CommandLink ( повторное редактирование )

<h:commandLink actionListener="#{userController.prepareCreateSysRequest}" value="Request New Sector/Category">    
    <f:ajax  execute="popup_sys_user_req @this" render="popup_sys_user_req">
        <rich:componentControl id="popup_ctr" event="click" target="popup_sys_user_req" operation="show"/>
    </f:ajax>                                
</h:commandLink>
----------------------------
//Managed Bean:
public void prepareCreateSysRequest(ActionEvent event ) {
    selectedSysUserRequest = new Sysuserrequest();
    JsfUtil.log("Prepare Create System User Request");
}

Этот пост продолжает дискуссию о всплывающей панели. Привет Крис.

Ответы [ 2 ]

1 голос
/ 13 мая 2014

Проблема в том, что всплывающее окно не является дочерним по форме в jsf, вам нужно только использовать атрибут domElementAttachment , чтобы изменить это. Итак, ваш код будет выглядеть так:

    <h.form>
...
<a4j:region>
      <rich:popupPanel id="popup_sys_user_req" modal="false" autosized="true" resizeable="false" domElementAttachment="form">
      <f:facet name="header">
...
1 голос
/ 11 августа 2011

Если я правильно понимаю, вы хотите отправить все элементы формы внутри popupPanel, но не за пределы панели при вызове someAction1? Я могу придумать два способа сделать это: 1. a4jcommandButton имеет атрибут limitToList, вы можете указать, какие компоненты вы хотите обновить на сервере 2. создайте свою панель popupPanel вне первой формы и затем используйте ее собственную форму:

<h:form>
...
<a4j:commandButton action="someAction2"...
</h:form>

<rich:popupPanel>
<h:form>
...
<a4j:commandButton action="someAction1"...
</h:form>
</rich:popupPanel>

Обновление Если вы используете RichFaces 4, вы можете заменить атрибут limitToList на limitRender

...