Я ударил стену. Я хорошо знаком с a4j и яркими тегами (я использую Seam 2.2.0 и Richfaces 3.3.1). Тем не менее, я пытаюсь сделать что-то очень простое, но в богатом: modalPanel.a4j: поддержка в богатых: modalPanel
Кажется, что rich: modalPanels не позволяют запускать события Ajax. Вот простая разбивка: У меня есть h: selectOneMenu с некоторыми элементами в нем и значение которого привязано к бэк-файлу. Прикрепленный к этому h: selectOneMenu - это тег поддержки a4j: support, так что всякий раз, когда происходит событие изменения, бэк-файл должен обновляться. Действительно простой материал?
Однако, когда этот h: selectOneMenu находится в богатом: modalPanel, событие onchange не обновляет бэк-файл до тех пор, пока богатый: modalPanel не закроется.
Я могу подтвердить это, потому что я запускаю его в режиме отладки Eclipse, и у меня есть точка останова на настройщике свойства, которое подключено к h: selectOneMenu. Это сводит меня с ума! Это ванильный материал для Ajax, но богатый: modalPanels, похоже, не позволяют этого.
Итак, вопрос: могу ли я сделать материал Ajax в богатых: modalPanel? Я в основном пытаюсь использовать rich: modalPanel как форму (я пробовал a4j: form и h: form безрезультатно), который реагирует на изменения в раскрывающемся списке (например, когда пользователь меняет выпадающее значение, определенный часть формы должна быть восстановлена). Я пытаюсь сделать что-то, что невозможно?
Вот упрощенная версия modalPanel:
<rich:modalPanel id="quickAddPanel">
<div>
<a4j:form id="quickAddPaymentForm" ajaxSubmit="true">
<s:decorate id="paymentTypeDecorator">
<a4j:region>
<h:selectOneMenu
id="paymentType"
required="true"
value="#{backingBean.paymentType}"
tabindex="1">
<s:selectItems
label="#{type.description}"
noSelectionLabel="Please select..."
value="#{incomingPaymentTypes}"
var="type"/>
<s:convertEnum/>
<a4j:support
ajaxSingle="true"
event="onchange"
eventsQueue="paymentQueue"
immediate="true"
limitToList="true"
reRender="paymentTypeDecorator, paymentDetailsOutputPanel, quickAddPaymentForm"/>
</h:selectOneMenu>
</a4j:region>
</s:decorate>
</fieldset>
<fieldset class="standard-form">
<div class="form-title">Payment details</div>
<a4j:outputPanel id="paymentDetailsOutputPanel">
<h:outputText value="This should change whenever dropdown changes: #{backingBean.paymentType}"/>
</a4j:outputPanel>
</fieldset>
</a4j:form>
</div>
</rich:modalPanel>
С уважением, Энди
- любое действие, вызванное a4j: поддержка события обмена? Если да, то вы подтвердили, что действие вызвано? – niksvp
Нет. Это простая привязка a4j: support event = 'onchange', которая гарантирует, что когда выпадающее меню изменится, значение bean bean-компонента, которое оно обязательно получит, будет обновлено. И он обновляется, но только после закрытия модальной панели. Если это не было в модульной панели, обновление компонента будет происходить каждый раз, когда значение сбрасывается. –
Модальная панель с формой (h или a4j) внутри должна работать. Ах, и не забывайте переписывать его. Отредактируйте и разместите свой модальный код, чтобы мы могли помочь вам лучше. – Renan