I am implementing p:poll
on a page that user can see their updated position in a queue. I tried running on a page but it did not work, the updated position in the queue was left 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 ManagementFileFacade
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();
}
}
ManagingFile class
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'd like you to bring some suggestions to solve this problem. Thanks!