Ich habe eine Wand getroffen. Ich kenne die Tags a4j und reich ziemlich gut (ich benutze Seam 2.2.0 und Richfaces 3.3.1). Ich versuche jedoch, etwas ganz einfaches zu tun, aber in einem Rich: ModalPanel.a4j: Unterstützung in einem Rich: ModalPanel
Es scheint, dass Rich: ModalPanels keine Ajax-Ereignisse ausgelöst werden können. Hier ist eine einfache Aufteilung: Ich habe ein h: selectOneMenu mit einigen Elementen und dessen Wert an eine Backing-Bean angehängt. An dieses h angehängt: selectOneMenu ist ein a4j: support-Tag, so dass jedes Mal, wenn das Änderungsereignis ausgelöst wird, die Backing-Bean aktualisiert werden soll. Wirklich einfaches Zeug wie?
Wenn sich dieses h: selectOneMenu jedoch in einem Rich: ModalPanel befindet, aktualisiert das Ereignis onchange die Backing-Bean erst, wenn das Rich: ModalPanel geschlossen wird.
Ich kann dies bestätigen, weil ich es im Eclipse-Debug-Modus ausgeführt habe und ich habe einen Haltepunkt auf dem Setter der Eigenschaft, die an das h: selectOneMenu angeschlossen ist. Das macht mich verrückt! Das ist Vanilla-Zeug für Ajax, aber reich: ModalPanels scheinen es nicht zu erlauben.
Also, die Frage ist: kann ich Ajax Sachen in einem Rich: ModalPanel tun? Ich versuche im Grunde, das Rich: ModalPanel als Formular zu verwenden (ich habe a4j: form und h: form vergeblich versucht), das auf Änderungen des Dropdowns reagiert (zB wenn der Benutzer das Dropdown ändert, ein bestimmtes ein Teil des Formulars sollte erneut gesendet werden). Versuche ich etwas zu tun, was nicht möglich ist?
Hier ist eine vereinfachte Version des 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>
Grüße, Andy
ist eine Aktion, die von a4j aufgerufen wird: onchange-Ereignis unterstützen? Wenn ja, haben Sie dann bestätigt, dass die Aktion aufgerufen wird? – niksvp
Nein. Es ist eine einfache a4j: support event = "onchange" -Bindung, die sicherstellt, dass der Backing-Bean-Wert, an den er gebunden ist, aktualisiert wird, wenn sich das Dropdown ändert. Und es wird aktualisiert, aber erst nachdem das Modal Panel geschlossen wurde. Wenn es nicht in einem modalen Panel war, würde die Aktualisierung der Bean jedes Mal stattfinden, wenn sich der Drop-Down-Wert änderte. –
Modalpanel mit einer Form (h oder a4j) sollte funktionieren. Ah, und vergessen Sie nicht, es neu zu vergeben. Bearbeiten und veröffentlichen Sie Ihren modalen Code, damit wir Ihnen besser helfen können. – Renan