Tengo un p:dataGrid que se utiliza para la actualización de sí mismo en la 3.0.1. Ahora he actualizado a la PF 3.1 y el ajax evento de actualización de la «availableIcons» componente no el fuego ya. No me da un error de que el componente no se encuentra en la vista.

La 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>

No veo lo que falta o lo que es incorrecto.

Este es el backing bean código

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;
}

Traté de hacer update=»@» el formulario, a continuación, la actualización de los fuegos, sino que se cierra el modal panel completo.

Gracias,
Coen

  • Su problema concreto no está claro. Usted dijo que el componente no se actualiza, pero también dijo que el ajax evento no fuego. ¿Exactamente cuál es el problema concreto que ahora? No vas a decir que la petición ajax se despidieron, pero que la respuesta de ajax no contiene la actualización? Mirar una vez más en determinados navegadores web desarrollador de herramientas si no está seguro.
  • OK, me refiero al ajax evento de actualización no se dispara más. El real ajax evento de cambio todavía se apaga. Voy a reescribir ese.
  • Es la actualización de la respuesta de ajax o no?
  • Hola BalusC, no entiendo muy bien a qué te refieres con respuesta de ajax. Lo que pasa es que desencadena el evento de cambio y por lo tanto el método en el que el oyente se llama, pero el único componente que se actualiza es el actual casilla de verificación las casillas de verificación en el datagrid no son evaluados.
  • La respuesta de la petición HTTP que se desencadena por JavaScript. En Chrome/IE9 se puede ver en la pestaña «Red» de herramientas de desarrollador (presione F12). En Firefox necesita instalar el plugin Firebug para esto primero.
  • Acabo de comprobar, sí, cuando yo marque/desmarque el botón que se obtiene una respuesta: javax.faces.partial.ajax=true&javax.faces.source=Application:availableIcons:5:iconSelector&javax.faces.partial.execute=Application:availableIcons .
  • Erm, que es la petición de la cadena de consulta.
  • <parcial-respuesta><cambios><actualización id=»javax.faces.ViewState»><![CDATA[6050563207329801259:5966180118196624]]></update></changes></partial-response>
  • Incluso sin EL excepción? Edit: ah bueno.

InformationsquelleAutor Coen Damen | 2012-02-14

1 Comentario

  1. 1

    De hecho, la forma de cómo PrimeFaces localiza los componentes de la relación de IDENTIFICACIÓN de cliente ha sido cambiado en PrimeFaces 3.1 para adherir el UIComponent#findComponent() javadoc.

    En su caso particular, es necesario especificar el absoluta ID de cliente de la <p:dataGrid> lugar. Manera más fácil de entenderlo es comprobar el ID de la <p:dataGrid> generado en la fuente HTML. Con el código se ha dado hasta ahora, que sería Application:availableIcons. Usted necesita el prefijo : hacer es absoluta y, a continuación, hacer referencia a ella en update de la siguiente manera:

    <p:ajax update=":Application:availableIcons" ... />

    Actualización como por los comentarios resulta que no funciona en absoluto. Usted podría tratar de envolver la tabla en algunos invisible que contiene el componente como <h:panelGroup> y actualizarla en su lugar. Alternativamente, usted podría considerar el movimiento de los <h:form> en el diálogo y el uso de update="@form" lugar. Tener la <h:form> fuera del cuadro de diálogo es una especie de extraño, de todos modos. Usted seguramente no presentar todos los otros insumos que están fuera del cuadro de diálogo en el interior de la misma forma.

    • Hola BalusC, he probado todas las combinaciones antes he publicado este tema. Soy consciente de que los nuevos cambios en 3.1. Cuando hago update=»:Aplicación:availableIcons» todavía no haya terminado la actualización y me da la respuesta <?xml version=’1.0′ encoding=’UTF-8′?> <parcial-respuesta><cambios><actualización id=»javax.faces.ViewState»><![CDATA[5529182801697183851:5483705111163074287]]></update></changes></partial-response>. Cuando yo uso el update=»Aplicación:availableIcons» me «no se encuentra el componente en la vista de error». Curioso, ¿verdad ?
    • otra cosa es que, en 3.0.1 he utilizado update=»Aplicación:availableIcons» y hay funcionó a la perfección.
    • Usted podría considerar la posibilidad de mover el formulario en el cuadro de diálogo y el uso update="@form" lugar. Al tener la forma fuera del cuadro de diálogo es una especie de extraño, de todos modos. Usted seguramente no presentar todos los otros insumos que están fuera del cuadro de diálogo en el interior de la misma forma, ¿verdad?
    • Hola BalusC, el código es en realidad un fragmento de una muy compleja interfaz gráfica de usuario, por lo que todo es de una forma. Voy a tratar de hacer del Diálogo un formulario por separado y ver si eso funciona como una solución de verdad. Gracias
    • Que sería una buena idea. Tener una «Forma de Dios» no es necesariamente la mejor práctica. De esta manera usted está por defecto enviar/transformación/conversión/validación de todo, que está dentro de la misma forma. Si tiene varias «secciones», puede perturbar el uno al otro. Poner estas «secciones» cada uno en su propio <h:form>.
    • que hizo el truco ! simple pero eficaz. Me quedé ciego porque se utiliza para trabajar en 3.0.1 …gracias de nuevo!

Dejar respuesta

Please enter your comment!
Please enter your name here