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.

InformationsquelleAutor Coen Damen | 2012-02-14

Schreibe einen Kommentar