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

steven comentado Ene 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 Ene 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.

steven comentado Ene 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 Ene 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, accede o regístrate para responder a esta pregunta.

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


Actividad Reciente

  • yoclens ganó una medalla hace 24 minutos

    Buena Pregunta - Recibido +1 votos en pregunta
  • yoclens preguntó hace 2 horas

    capturar valores del input
  • yoclens ganó una medalla hace 16 horas

    Regular - Primera visita hace más de 90 días
  • internoma ganó una medalla hace 1 día

    Club de los 100 - Received total of 100 points
  • Leonardo-Tadei ganó una medalla hace 2 días

    Buen Comentario - Recibió +2 votos
  • sommer0123 ganó una medalla hace 2 días

    Buena Respuesta - Recibido +1 votos en respuesta
  • gerko23 ganó una medalla hace 2 días

    Buena Respuesta - Recibido +1 votos en respuesta
  • carlossevi ganó una medalla hace 2 días

    Buena Respuesta - Recibido +1 votos en respuesta
  • carlossevi ganó una medalla hace 2 días

    Buen Comentario - Recibió +2 votos
  • edisonosorioj ganó una medalla hace 2 días

    Club de los 100 - Received total of 100 points

¿Eres Usuario Apple?

...

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

Conecta