Всплывающая панель Richfaces не изменяется автоматически при динамическом обновлении содержимого
У меня есть богатая popupPanel с двумя selectOneMenus, которые при использовании отображают еще несколько компонентов внутри всплывающего окна. Основная проблема заключается в том, что всплывающая панель не имеет автоматического размера при визуализации компонентов. Проблема появилась, когда я обновил до richfaces 4.3.7, но эта версия решает другую проблему, которая у меня была, поэтому я не хочу возвращаться к предыдущей версии.
<rich:popupPanel id="editAccessPopup" modal="true" autosized="true" domElementAttachment="parent">
<f:facet name="controls">
<h:outputLink value="#"
onclick="#{rich:component('editAccessPopup')}.hide(); return false;"> X </h:outputLink>
</f:facet>
<h:form id="edit_access_popup_form">
<a4j:outputPanel id="outputPanel" layout="block">
<legend style="font-weight: bold;">Edit Access</legend>
<rich:panel>
<h:panelGrid columns="2" style="width:100%"
columnClasses="panelgrid_label_column, panelgrid_input_column">
<h:outputLabel style="font-weight: bold; align:left;"
value="Type"
for="edit_access_access_type_menu" />
<h:selectOneMenu id="edit_access_access_type_menu"
value="#{serviceDesignBean.accessTypeSelectData.selectedIndex}"
valueChangeListener="#{serviceDesignBean.valueChangedForAccessType}" >
<f:selectItem itemValue=""
itemLabel="#{lbl.default_selectitem_value}" />
<f:selectItems
value="#{serviceDesignBean.accessTypeSelectData.list}"
var="accessType" itemValue="#{accessType.value}"
itemLabel="#{accessType.label}" />
<a4j:ajax event="valueChange"
render="service_id_panel, edit_access_popup_form"
execute="@this" />
</h:selectOneMenu>
<h:outputLabel style="font-weight: bold; align:left;"
value="#{lbl.edit_access_popup_service_action}"
for="edit_access_service_action_menu" />
<h:selectOneMenu id="edit_access_service_action_menu"
value="#{serviceDesignBean.accessActionSelectData.selectedIndex}"
valueChangeListener="#{serviceDesignBean.valueChangedForAccessAction}">
<f:selectItem itemValue=""
itemLabel="#{lbl.default_selectitem_value}" />
<f:selectItems
value="#{serviceDesignBean.accessActionSelectData.list}"
var="accessAction" itemValue="#{accessAction.value}"
itemLabel="#{accessAction.label}" />
<a4j:ajax event="valueChange"
render="service_id_panel, edit_access_popup_form"
execute="@this" />
</h:selectOneMenu>
<h:outputLabel value="Service Id" for="input_service_id"
style="font-weight: bold; align:left;" />
<a4j:outputPanel id="service_id_panel" layout="block">
<h:inputText id="input_service_id"
value="#{serviceDesignBean.inputServiceId}"
disabled="#{not serviceDesignBean.serviceIdFlag}" />
</a4j:outputPanel>
</h:panelGrid>
</rich:panel>
</a4j:outputPanel>
<h:panelGroup id="access_attr_panel"
style="margin-left:20px;margin-top:20px;"
rendered="#{not empty serviceDesignBean.accessActionSelectData.selectedIndex and not empty serviceDesignBean.accessTypeSelectData.selectedIndex}">
<fieldset>
<legend>#{lbl.sol_manag_service_Attributes}</legend>
<h:panelGrid style="margin-left:20px;" class="gridStyle"
columnClasses="panelgrid_label_column,panelgrid_imput_column"
columns="2">
<h:outputText value="#{lbl.ServiceAttributeName_SPEED}"
rendered="#{serviceDesignBean.serviceAttrVisibility.visibilityToSpeed}" />
<a4j:outputPanel layout="block"
rendered="#{serviceDesignBean.serviceAttrVisibility.visibilityToSpeed}">
<h:selectOneMenu
disabled="#{not serviceDesignBean.serviceAttrVisibility.editableSpeed}"
value="#{serviceDesignBean.selectedSpeed}">
<f:selectItem itemValue=""
itemLabel="#{lbl.default_selectitem_value}" />
<f:selectItems value="#{serviceDesignBean.accessSpeedList}"
var="speed" itemValue="#{speed.speedValue}"
itemLabel="#{speed.speedValue}" />
<a4j:ajax event="valueChange" execute="@this" />
</h:selectOneMenu>
</a4j:outputPanel>
...more components to get rendered...
<a4j:commandButton id="save_access_btn"
value="#{lbl.service_design_save_edited_access}"
onclick="#{rich:component('editAccessPopup')}.hide()"
actionListener="#{serviceDesignBean.saveEditedAccess}"
render=":pending_services, :accesses_form"
oncomplete="javascript:location.reload(true)"></a4j:commandButton>
</h:form>
</rich:popupPanel>
Я нашел здесь: https://developer.jboss.org/thread/241593 что я могу использовать этот panel.doResizeOrMove(RichFaces.ui.PopupPanel.Sizer.Diff.EMPTY); заставить всплывающее окно изменить размер. У меня есть два вопроса:
- Можете ли вы сказать мне, как изменить размер всплывающего окна с помощью вышеуказанной функции?
- Есть ли другой способ исправить мою проблему?
Заранее спасибо!
1 ответ
Вы просто вызываете метод, так же, как вы делаете это для закрытия панели:
#{rich:component('editAccessPopup')}.doResizeOrMove(RichFaces.ui.PopupPanel.Sizer.Diff.EMPTY);
Что касается других опций, вы можете перерисовать всю панель. добавлять oncomplete="#{rich:component('editAccessPopup')}.show();
на кнопку команды, чтобы снова показать панель.