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