Prezados(as),
JSF 2
Primefaces 3.3.1
Primefaces Mobile 0.9.3
Situação: quando o usuário clicar no botão Pesquisar, preciso que ele fique imediatamente disabled="true" e seu value alterado de "pesquisar" para "pesquisando…". Após o retorno do método presente no ActionListener dele, o botão volta a ficar disabled="false" e seu value = "Pesquisar".
Tentei das seguintes formas mas não obtive sucesso:
- http://stackoverflow.com/questions/9080005/how-to-enable-disable-a-jsf-command-button
- a mesma url acima, colocando immediate="true";
- Usando javascript, com função sendo chamada via onclick do botão. Neste caso acaba sem eu querer ocorrendo um refresh na página, fato que não quero que ocorra mas sim que seja atualizado apenas o botão.
Alguém pode ajudar ?
Segue o código:
<?xml version='1.0' encoding='ISO-8859-1' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<f:view xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:pm="http://primefaces.org/mobile"
contentType="text/html"
lang="pt-br">
<h:head>
<h:outputScript library="js" name="cad_pedido_venda.js" />
<h:outputScript library="js" name="criaobj.js" />
<h:outputScript library="js" name="tnaveg.js" />
<h:outputScript library="js" name="tnaveg-jq.js" />
</h:head>
<pm:page title="Teste - Cadastro de Pedido de Venda">
<f:facet name="preinit">
<link type="text/css" rel="stylesheet" href="#{request.contextPath}/resources/css/cssLayout.css" />
<link type="text/css" rel="stylesheet" href="#{request.contextPath}/resources/css/default_MOBILE.css" />
</f:facet>
<pm:view id="cad_pedido_venda01" swatch="a" >
<pm:header title="Titulo da página" fixed="true" swatch="b" >
<f:facet name="left"><p:button value="Retornar ao menu" icon="back" href="main_mobile_cad_pedido_venda.jsf" /></f:facet>
<h:form>
<p:commandButton value="Sair" icon="back" disabled="#{pedidoVendaBean.desativar}" action="#{inicial.logout()}" />
</h:form>
Tela 1: Cadastro de Pedido de Venda - Escolha do cliente
</pm:header>
<pm:content>
<h:form id="form_cad_pedido_venda01">
<p:growl id="msgs01" showDetail="true" />
<p:focus for="nome_cliente" />
<h:outputLabel value="Buscar cliente por: " />
<p:inputText id="nome_cliente" value="#{pedidoVendaBean.pedido.cliente.nome_cliente}" type="text" onkeydown="return ProxInput(this, event)" onkeyup="this.value = this.value.toUpperCase();" />
<p:commandButton value="#{pedidoVendaBean.nomeBotao}" disabled="#{pedidoVendaBean.desativar}" actionListener="#{pedidoVendaBean.carregaListaClientes()}" update="clientes form_cad_pedido_venda01" immediate="true" >
<f:setPropertyActionListener value="false" target="#{pedidoVendaBean.desativar}"/>
<f:setPropertyActionListener value="PESQUISANDO" target="#{pedidoVendaBean.nomeBotao}"/>
</p:commandButton>
<p:dataTable id="clientes" var="cli" value="#{pedidoVendaBean.mediumClienteCgc}"
selectionMode="single" selection="#{pedidoVendaBean.clienteSelecionado}"
rowStyleClass="#{cli.saldoEmAtraso gt 0 ? 'vermelho' : cli.saldoEmAberto le 0 ? 'verde' : 'amarelo' }"
emptyMessage="Informe acima a primeira letra ou parte da razão social ou CNPJ. Em seguida clique no botão 'Pesquisar' e depois no cliente desejado." >
<p:ajax event="rowSelect" listener="#{pedidoVendaBean.onRowSelectCliente}"
update=":form_cad_pedido_venda01:msgs01 :cad_pedido_venda02 :cad_pedido_venda03 :cad_pedido_venda04" />
<p:column>
<h:outputText value="#{cli.codigo_cliente} - #{cli.loja_cliente}" />
<h:outputText value="#{cli.cgc}" >
<f:converter converterId="cnpjConverter" />
</h:outputText><br />
<h:outputText value="#{cli.nome_cliente}" /><br />
<h:outputText value="#{cli.nome_reduzido}" /><br />
<h:outputText value="#{cli.bairro} #{cli.cidade}-#{cli.uf}" /><br />
<h:outputText value="Email NF-e: #{cli.emailNFE}" /><br />
</p:column>
</p:dataTable><br />
<h:outputText value="Legenda: " style="font-weight: bold"/>
<h:outputText value="Sem títulos em aberto ou atraso; " styleClass="verde" />
<h:outputText value="Saldo títulos a vencer > 0; " styleClass="amarelo" />
<h:outputText value="Saldo títulos em atraso > 0." styleClass="vermelho" />
</h:form>
</pm:content>
</pm:view>
<pm:view id="cad_pedido_venda02" swatch="a" >
...
No managedBean tenho :
public class PedidoVendaBean implements Serializable {
...
private Boolean desativar = false;
private String nomeBotao = "Pesquisar";
public String getNomeBotao() {
return nomeBotao;
}
public void setNomeBotao(String nomeBotao) {
this.nomeBotao = nomeBotao;
}
public void setDesativar(Boolean desativar) {
this.desativar = desativar;
}
public Boolean getDesativar() {
return desativar;
}
...
public void carregaListaClientes() {
this.desativar = true;
this.nomeBotao = "pesquisando....";
.....
this.nomeBotao = "Pesquisar";
this.desativar = false;
}