benutze Ich arbeite mit Primefaces 5.3.Primefaces p: selectOneMenu oder p: selectBooleanCheckbox nicht feuern change-event je nachdem ob ich h: form
Zuerst implementiert ich Funktionalität Sichtbarkeit ap zu ändern: selectOneMenu auf dem Wert von p abhängig: selectBooleanCheckbox nach diesem Beitrag:
Enabling and disabling components via select checkbox
Die bisher funktioniert, wenn ich die h verwenden: Form .
Als nächstes wollte ich die Werte in der Bean aktualisieren, wie im p: selectOneMenu ausgewählt. Hier beginnt meine Frage: Selbst wenn ich p: ajax explizit zum Aufrufen eines Listeners verwende, wird dieser nicht aufgerufen. Dies ist mein Code:
<h:panelGrid>
<p:selectOneMenu value="#{schedulerCDIBean.selectedParentTask}" var="parentTask" id="taskDependence" disabled="#{task.dependsOn != 'true'}">
<p:ajax event="change" listener="#{schedulerCDIBean.taskToAddListener}"/>
<f:selectItems id="taskDependenceItems" value="#{schedulerCDIBean.taskWebDataObjectList}" var="item" itemLabel="#{item.taskName}"
itemValue="#{item}" />
<p:column>
<h:outputText value="#{parentTask}"/>
</p:column>
</p:selectOneMenu>
</h:panelGrid>
Und hier ist, wie ich aktivieren/die selectOneMenu deaktivieren:
<p:selectBooleanCheckbox id="dependsOnTask" value="#{task.dependsOn}" itemLabel="Depends On">
<p:ajax update="taskDependence" process="@this"/>
</p:selectBooleanCheckbox>
Das alles lebt in ap: Reiter des p: accordionPanel wo 'Aufgabe' ist die var von meine DataObject-Liste.
Wie in diesem Beitrag von @BalusC erwähnt: commandLink/commandButton/ajax backing bean action/listener method not invoked (Mögliche Ursachen: 2),
"Sie können mehrere UIForm Komponenten in nicht miteinander Nest."
Also, wenn ich die h: form-Direktive entfernen, funktioniert der Aufruf an den Listener in der Bean. Aber jetzt ist der Wert der p: selectBooleanCheckbox immer auf 'false' gesetzt und somit wird die Komponente nicht auf sichtbar aktualisiert.
Ich fand einen Beitrag here, wo OP hatte das gleiche Problem und löste es durch Hinzufügen der h: form-Anweisung.
EDIT: Meine 'Form' ist eine ui: Zusammensetzung und beginnt wie dieses <ui:composition template="/templates/pages/mainPage.xhtml">
, wo mainPage.xhtml enthält h: Kopf und schließt die 'header.xhtml' von ui mit: include, und es gibt ah: Form . Aber diese h: -Form ist schon vorher geschlossen, also ist das Problem nicht hier.
Nun, ich möchte nicht den Weg gehen mit dem Hinzufügen der h: Form erneut, da es zu unspezifizierten Verhalten führt. Aber was mache ich falsch, wenn meine p: selectBooleanCheckbox Werte nicht richtig eingestellt sind?
Vielen Dank für Ihre Hilfe!
UPDATE
Das Problem war nicht die h: Form, wie es war eigentlich nicht verschachtelt. Jetzt bin ich nur noch mit den Zuhörern für das p: selectOneMenu fest, da sie nicht angerufen werden. Ich habe auch versucht, partialSubmit="true"
auf <p:ajax />
, die bisher nicht zu einer Lösung führte.
Haben Sie Setter/Getter auf 'selectedParentTask' haben? Wie sieht Ihre Listener-Methode 'taskToAddListener' aus? Hast du versucht, einen 'p: remoteCommand' zu verwenden? – chaeschuechli
@chaeschuechli Ja, ich habe den Getter/Setter und die Signatur des Hörers sieht so aus: 'public void taskToAddListener (AjaxBehaviorEvent event)'. Aber das Problem ist mit der p: selectBooleanCheckbox (task.dependsOn), wo der Wert immer auf 'falsch' gesetzt ist. Es ist nicht mehr mit der ausgewähltenParentTask, seit ich die h: Form losgeworden bin. Ich habe gerade versucht, den folgenden Ansatz mit p: Remotecommand ' \t \t \t \t \t ', was auch nicht funktioniert hat. Vielen Dank für Ihre Hilfe –
danny
In Ihrem Tag innere selectBooleanCheckbox müssen Sie eine Listener-Methode aufrufen, die den booleschen Wert aktualisiert. –
chaeschuechli