Я врезался в стену.
Я хорошо знаю теги a4j и rich (я использую Seam 2.2.0 и Richfaces 3.3.1). Тем не менее, я пытаюсь сделать что-то довольно простое, но богатое: modalPanel.
Кажется, что rich: modalPanels не позволяют запускать события Ajax. Вот простая разбивка:
У меня есть h: selectOneMenu с некоторыми элементами в нем, чье значение привязано к компоненту поддержки. К этому h: selectOneMenu прикреплен тег a4j: support, поэтому всякий раз, когда вызывается событие изменения, компонент поддержки должен обновляться. Действительно простые вещи, а?
Однако, когда этот h: selectOneMenu находится в rich: modalPanel, событие onchange не обновляет компонент поддержки до тех пор, пока rich: modalPanel не закроется.
Я могу подтвердить это, потому что я запускаю его в режиме отладки Eclipse, и у меня есть точка останова на установщике свойства, которое подключено к h: selectOneMenu.
Это сводит меня с ума! Это ванильный материал для Ajax, но богатый: modalPanels, похоже, не позволяет этого.
Итак, вопрос в том, могу ли я делать Ajax с помощью rich: modalPanel? Я в основном пытаюсь использовать rich: modalPanel как форму (я пробовал a4j: form и h: form безрезультатно), которая реагирует на изменения в раскрывающемся списке (например, когда пользователь меняет раскрывающийся список, определенное часть формы должна быть перерисована). Я пытаюсь сделать что-то, что не возможно?
Вот упрощенная версия модальной панели:
<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>
С уважением,
Andy