Primefaces Mobile does not work p:Poll

Asked

Viewed 261 times

3

I am implementing p:poll on a page that user can see their updated position in a queue. I tried to run on a page but it didn’t work, the updated queue position went blank in the field using Primefaces Mobile API, see the page I created:

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:pm="http://primefaces.org/mobile"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:p="http://primefaces.org/ui">

    <f:view renderKitId="PRIMEFACES_MOBILE">
        <h:head>
            <f:facet name="first">
                <meta content='text/html; charset=UTF-8' http-equiv="Content-Type"/>
                <title>Cliente</title>
                <h:outputScript library="primefaces/poll" name="poll.js"/>
            </f:facet>
        </h:head>
        <h:body>
            <pm:page>
                <pm:content>
                    <h:form>
                        <pm:field>
                            <p:outputLabel for="nome" value="Nome:"/>
                            <p:outputLabel id="nome" value="#{filaController.cliente.nome}"/>
                        </pm:field>
                        <pm:field>
                            <p:outputLabel for="telefone" value="Telefone:" />
                            <p:outputLabel id="telefone" value="#{filaController.cliente.telefone}" />
                        </pm:field>
                        <pm:field>
                            <p:outputLabel for="fila" value="Fila:"/>
                            <p:outputLabel id="fila" value="#{filaController.posicao}"/>
                        </pm:field>
                        <pm:field>
                            <p:outputLabel for="quantidade" value="Quantidade de fila:"/>
                            <p:outputLabel id="quantidade" value="#{filaController.quantidadeFila}"/>
                        </pm:field>
                        <p:poll interval="1" listener="#{filaController.atualizaPosicao()}" update="fila"/>
                        <p:commandButton value="Desistir" action="#{filaController.desista()}"/>
                    </h:form>
                </pm:content>
            </pm:page>
        </h:body>
    </f:view>
</html>

Managerbean:

@ManagedBean
@ViewScoped
public class FilaController {

    private Cliente cliente;
    private HttpSession session;
    private FacesContext context;
    private GerenciamentoDeFilaFacade fila;
    private String posicao;

    public FilaController() {
        context = FacesContext.getCurrentInstance();
        session = (HttpSession) context.getExternalContext().getSession(false);
        cliente = (Cliente) session.getAttribute(TipoUsuario.cliente.toString());

        if (cliente != null) {
            fila = new GerenciamentoDeFilaFacade();
        } else {
            System.out.println("Cliente está null");
        }
    }

    public Cliente getCliente() {
        return cliente;
    }

    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }

    public String getQuantidadeFila() {
        return fila.quantidadeTotal() + " Filas";
    }

    public String getPosicaoFila() {
        return fila.posicao(cliente) + "º posição";
    }

    public String getPosicao() {
        return posicao;
    }

    public void setPosicao(String posicao) {
        this.posicao = posicao;
    }

    public String desista() {
        if (fila.removerCliente(cliente)) {
            return "index.xhtml";
        } else {
            return "cliente.xhtml";
        }
    }

    public void atualizaPosicao() {
        this.posicao = fila.posicao(cliente) + "º posição";
    }
}

Class Managementodefilafacade

public class GerenciamentoDeFilaFacade {

private GerenciamentoDeFila fila;
private Prioridade p = new Prioridade();


public GerenciamentoDeFilaFacade() {
    fila = GerenciamentoDeFila.getInstance();
}

public void inserir(Cliente cliente) {
    if (p.verifica(cliente)) {
        fila.inserirPioridade(cliente);
    } else {
        fila.inserir(cliente);
    }
}

public Cliente getCliente() {
    if (fila.verificaFilaPrioridadeDisponivel()) {
        return fila.getPrimeiroClientePioridade();
    }
    return fila.getPrimeiroCliente();
}

public Cliente chamarCliente() {
    if (fila.verificaFilaPrioridadeDisponivel()) {
        return fila.getChamarClientePrioridade();
    }
    return fila.getChamarCliente();
}

public int quantidadeTotal() {
    return fila.quantidade();
}

public int posicao(Cliente cliente) {
    if (p.verifica(cliente)) {
        return fila.posicaoPrioridade(cliente);
    }
    return fila.posicao(cliente);
}

public boolean removerCliente(Cliente cliente) {
    return fila.remove(cliente);
}

public Iterator<Cliente> Clientes() {
    return fila.getListaClientes();
}

}

Managementclass

public class GerenciamentoDeFila {

private static GerenciamentoDeFila instance = null;
private static LinkedList<Cliente> fila = new LinkedList<Cliente>();
private static LinkedList<Cliente> filaPrioridade = new LinkedList<Cliente>();

public static GerenciamentoDeFila getInstance() {
    if (instance == null) {
        instance = new GerenciamentoDeFila();
    }
    return instance;
}

public void inserir(Cliente cliente) {
    fila.addLast(cliente);
}

public void inserirPioridade(Cliente cliente) {
    filaPrioridade.addLast(cliente);
}

public Cliente getPrimeiroCliente() {
    return fila.peekFirst();
}

public Cliente getPrimeiroClientePioridade() {
    return filaPrioridade.peekFirst();
}

public Cliente getChamarCliente() {
    return fila.pollFirst();
}

public Cliente getChamarClientePrioridade() {
    return filaPrioridade.pollFirst();
}

public boolean remove(Cliente cliente) {
    if (filaPrioridade.contains(cliente)) {
        return filaPrioridade.remove(cliente);
    }
    return fila.remove(cliente);
}

public int posicaoPrioridade(Cliente cliente) {
    return filaPrioridade.indexOf(cliente) + 1;
}

public int posicao(Cliente cliente) {
    int qtd = filaPrioridade.size();
    return ((qtd + fila.indexOf(cliente)) + 1);
}

public int quantidade() {
    System.out.println("Quantidade de fila - Cliente: " + fila.size() + " - Prioridade: " + filaPrioridade.size());
    return fila.size() + filaPrioridade.size();
}

public boolean verificaFilaPrioridadeDisponivel() {
    return !filaPrioridade.isEmpty();
}

public Iterator<Cliente> getListaClientes() {
    LinkedList<Cliente> lista = new LinkedList<Cliente>();
    lista.addAll(filaPrioridade);
    lista.addAll(fila);
    return lista.iterator();
}

}

I would like you to bring some suggestions to solve this problem. Thank you!

  • You can post the code of this class: Managementodefilafacade ? What is the version of Primefaces?

  • I already put two more classes, see above. Primeface version is 5.0 and Primeface Mobile is 0.9.4

  • With Primeface 5 does not need Mobile 0.9.4, I think that from version 4 of Prime the projects were united. Just a few more info: which application server and version? is using Maven?

  • I am using the server is Tomcat 7 and using Maven.

1 answer

1

In my case adding

<h:outputScript library="primefaces" name="primefaces.js" />

inside h:body solved the problem in Primefaces 5.1.20.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.