entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Actualizar p:commandButton

Buenas noches a todos, os expongo mi problema, quiero hacer que, cuando el usuario haga clic un boton, se realizan x acciones y luego se volviera a actualizar para cambiar su estado. Os pongo mi codigo que lo comprenderéis mejor:

<h:panelGroup id="verOfertas" style="width:100%;margin:10px 0px; display: none;">
                    <p:dataList id="comprasUsuario" emptyMessage="No hay productos registrados" rows="3"
                                value="#{productosController.cargarPorNegocio()}" var="com">
                        <p:growl id="messagesVerOfertas" showDetail="true" />
                        <p:outputLabel style="display: none;" value="#{com.codProducto}"  />
                        <p:outputLabel style="display: none;" value="#{com.productoActivo}" />
                        <p:graphicImage value="#{com.imagen}" />
                        <p:outputLabel value="#{com.nombre}" />
                        <p:commandButton rendered="#{productosController.productoActivo() == false}" value="Activar Oferta"
                                         update="messagesVerOfertas">
                            <f:setPropertyActionListener target="#{productosController.cod_producto}" value="#{com.codProducto}" />
                            <f:ajax render="comprasUsuario" event="click" listener="#{productosController.activarProducto()}" />
                        </p:commandButton>
                        <p:commandButton rendered="#{productosController.productoActivo() == true}" value="Desactivar Oferta"
                                         update="messagesVerOfertas">
                            <f:setPropertyActionListener target="#{productosController.cod_producto}" value="#{com.codProducto}" />
                            <f:ajax render="comprasUsuario" event="click" listener="#{productosController.desActivarProducto()}" />
                        </p:commandButton>
                    </p:dataList>
                </h:panelGroup>

Aqui la parte del controlador:

public boolean productoActivo(){
        items = cargarPorNegocio();
        for (Productos prod : items){
            if ("1".equals(prod.getProductoActivo())){
                return true;
            } else {
                return false;
            }
        }
        return false;
    }
public void activarProducto(){
        // Comprobamos que no haya mas productos activos con el mismo user
        items = cargarPorNegocio();
        for (Productos prod : items) {
            if (!prod.getProductoActivo().equals("1")){
                activado = ejbFacade.activarProducto(cod_producto);
                if (activado == true) {
                    productoActivo();
                    message = new FacesMessage("Producto activado con éxito");
                } else {
                    productoActivo();
                    message = new FacesMessage("Hubo un problema al activar el producto \n"
                    + "Por favor, asegurese que no tiene mas productos activos");
                }
            } else {
                message = new FacesMessage("Hubo un problema al activar el producto \n"
                    + "Por favor, asegurese que no tiene mas productos activos");
            }
        }
    }

Entonces, como veréis, lo que busco es que salga el mensaje, y que, a su vez, cambie el estado de "rendered" de los botones.

Estoy finalizando la aplicacion web, pero esta parte se me resiste.

¿Alguna idea? Gracias de antemano :D

algoritmico comentado Enero 6

no soy un experto en este tema pero visto tu proposito te puedo recomderdar usar la libreria dedicada simplecartjs disponibile gratuitamente en la pagina oficial con una amplia documentacion en ingles con algunos ejemplos practicos.
de otro modo te puedo pasar mi proyecto que hace lo mismo pero con menos codigo y mas sencillo de utilizar.

Yesod comentado Enero 6

Pues si, agregame al skype: jorge_yesod aunque tiene que ser los fines de semana, entre semana es imposible con el curro y demás.

El tema es que estoy usando esto para un curso de primefaces, aunque me valorarán en positivo si añado otra tecnología.

Gracias y seguimos en contacto.

algoritmico comentado Enero 7

antes de todo debo informarte que mi aplicacion esta basada al 90% di javascript y usa solo el php para guardar los datos del formulario en un archivo de texto plano.

Yesod comentado Enero 7

Yo en este caso solo me queda los cambios visuales, ya sea por javascript o jsf (que controla tanto front como back)

1 Respuesta

0voto

Yesod Puntos3370

Vale, ya he dado con la solución: <f:ajax render="verOfertas" event="click"/>

actualiza el panelGroup haciendo de nuevo el rendered. Ahora lo que me queda es cuando recargue la web, mediante JQuery (supongo) hacer que el panel que estaba visible se ponga como tal :)

Por favor ingresa o regístrate para responder a esta pregunta.

¿Conoces alguien que puede responder?
¡Comparte esta pregunta!


Actividad Reciente

¿Eres Usuario Apple?

...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta