Primefaces-Komponente nicht aktualisiert
Habe ich eine p:dataGrid, das update selbst, in der Version 3.0.1 vor. Nun habe ich ein Upgrade auf PF 3.1 und die ajax-update-Ereignis des "availableIcons" - Komponente keine Feuer mehr. Ich glaube nicht, erhalte eine Fehlermeldung, dass die Komponente nicht gefunden wird, in den Blick.
Den XHMTL
<h:form id="Application">
......
<p:confirmDialog id="iconDialog" message="Select one icon"
showEffect="bounce" hideEffect="explode" header="Icon Selection"
severity="alert" widgetVar="iconSelect" modal="false">
<p:dataGrid id="availableIcons" var="icon"
value="#{appEditController.availableIcons}" columns="4">
<p:column>
<p:panel id="pnl" header="" style="text-align:center">
<h:panelGrid columns="1" style="width:100%" id="iconPanelGrid">
<p:graphicImage value="/resources/icons/#{icon.icon}"
id="iconImage" />
<p:selectBooleanCheckbox id="iconSelector"
value="#{icon.selected}"
disabled="#{appEditController.isIconSelected(icon)}">
<p:ajax update="availableIcons" event="change"
process="availableIcons"
listener="#{appEditController.iconSelectedChanged(icon)}" />
</p:selectBooleanCheckbox>
</h:panelGrid>
</p:panel>
</p:column>
</p:dataGrid>
<p:commandButton value="Done" update="currentIcon"
action="#{appEditController.updateCurrentIcon}" ajax="false"
oncomplete="iconSelect.hide()" />
</p:confirmDialog>
.......
</h:form>
Ich nicht sehen, was fehlt oder was falsch ist.
Dies ist die backing-bean-code
public void updateCurrentIcon() {
for (IconVO iconVO : availableIcons) {
if (iconVO.isSelected()) {
log.debug("CURRENT ICON IS NOW " + iconVO.getIcon());
currentIcon = iconVO;
break;
}
}
}
public void iconSelectedChanged(IconVO iconVO) {
if (iconVO == currentIcon) {
log.debug("NULLING ICON");
currentIcon = null;
} else {
log.debug("SETTING NEW ICON");
currentIcon = iconVO;
}
}
public boolean isIconSelected(IconVO iconVO) {
log.debug("IS ICON SELECTED " + iconVO.getIcon());
if (currentIcon == null
|| iconVO.getIcon().equals(currentIcon.getIcon())) {
return false;
}
return currentIcon != null;
}
Habe ich versucht zu tun, update="@form", dann die update feuert, aber schließt es die modal-panel komplett.
Dank,
Coen
Dein konkretes problem wird, ist unklar. Sie sagte, dass die Komponente nicht aktualisieren, aber Sie sagte auch, dass die ajax-Ereignis nicht ausgelöst. Was genau ist das konkrete problem jetzt? Nicht Sie sagen, dass der ajax-request ist tatsächlich ausgelöst, aber, dass die ajax-Antwort nicht enthalten das update? Schauen Sie noch einmal in browser-spezifischen web-developer toolset, wenn Sie sich nicht sicher sind.
OK, ich meine die ajax-update-Ereignis nicht ausgelöst wird, nicht mehr. Die eigentliche ajax-change-Ereignis geht immer noch aus. Werde ich umschreiben.
Ist das update in der ajax-Antwort oder nicht?
Hi BalusC, ich verstehe nicht ganz, was du meinst mit der ajax-response. Was passiert, ist, dass das change-Ereignis ausgelöst, und damit die Methode im listener wird aufgerufen, aber die einzige Komponente, die aktualisiert wird, ist die aktuelle checkbox die anderen Checkboxen in der datagrid-Komponente nicht ausgewertet.
Die Antwort des HTTP-Requests, die ausgelöst wird durch JavaScript. In Chrome/IE9, können Sie es in "Netzwerk" - tab der developer-tools (F12 drücken). Im Firefox zu installieren, müssen Sie Firebug-plugin für das erste.
OK, ich meine die ajax-update-Ereignis nicht ausgelöst wird, nicht mehr. Die eigentliche ajax-change-Ereignis geht immer noch aus. Werde ich umschreiben.
Ist das update in der ajax-Antwort oder nicht?
Hi BalusC, ich verstehe nicht ganz, was du meinst mit der ajax-response. Was passiert, ist, dass das change-Ereignis ausgelöst, und damit die Methode im listener wird aufgerufen, aber die einzige Komponente, die aktualisiert wird, ist die aktuelle checkbox die anderen Checkboxen in der datagrid-Komponente nicht ausgewertet.
Die Antwort des HTTP-Requests, die ausgelöst wird durch JavaScript. In Chrome/IE9, können Sie es in "Netzwerk" - tab der developer-tools (F12 drücken). Im Firefox zu installieren, müssen Sie Firebug-plugin für das erste.
InformationsquelleAutor Coen Damen | 2012-02-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der Tat, die Art und Weise, wie PrimeFaces sucht-Komponenten von relativen client-ID wurde geändert in PrimeFaces 3.1 zur Einhaltung der
UIComponent#findComponent()
javadoc.In Ihrem Fall, müssen Sie die absolute client-ID der
<p:dataGrid>
statt. Einfachste Weg, um Abbildung es ist zu prüfen, die ID des<p:dataGrid>
im generierten HTML-Quelltext. Mit dem angegebenen code so weit, dass wäreApplication:availableIcons
. Sie müssen die Präfix mit:
zu machen, absolute und verweisen dann inupdate
wie folgt:Update wie pro die Kommentare, es stellt sich heraus, überhaupt nicht zu arbeiten. Sie könnten versuchen, das einwickeln der Tabelle in einer unsichtbaren übergeordneten Komponente wie
<h:panelGroup>
und es zu aktualisieren, statt. Alternativ könnte man erwägen, in die<h:form>
in das Dialogfeld und verwenden Sieupdate="@form"
statt. Mit der<h:form>
außerhalb der dialog ist irgendwie merkwürdig trotzdem. Sie sicherlich nicht Einreichen, alle anderen Eingaben, die außerhalb des dialogs in der gleichen form.eine andere Sache ist, in der Version 3.0.1 verwendet, ich update="Application:availableIcons" und es funktionierte perfekt.
Sie könnte erwägen, in der form in das Dialogfeld und verwenden Sie
update="@form"
statt. Mit der form, außerhalb der dialog ist irgendwie merkwürdig trotzdem. Sie sicherlich nicht Einreichen, alle anderen Eingaben, die außerhalb des dialogs in der gleichen form, richtig?Hi BalusC, der code ist eigentlich ein Ausschnitt aus einem sehr komplexen GUI, also alles ist in einem Formular. Ich werde versuchen, im Dialog ein eigenes Formular und sehen, ob das funktioniert als workaround, in der Tat. Dank
Das wäre eine gute Idee. Dass ein "Gott-Form" ist nicht unbedingt die beste Praxis. Auf diese Weise sind Sie standardmäßig die übermittlung/Verarbeitung/Konvertierung/Validierung alles, die in der gleichen form. Wenn Sie mehrere "Abschnitte", Sie können sich gegenseitig stören. Diese "Abschnitte" jeder in seiner eigenen
<h:form>
.InformationsquelleAutor BalusC