Boa tarde pessoal,
Estou precisando ajuda com o JSF, especificamente com o Inputmask do Primefaces 2.2.1.
Eu preciso fazer que um componente ?InputMask? do primefaces dispare o evento change e não tenho conseguido de jeito nenhum.
Tenho um formulário de cadastro que o usuário deve definir a data de inicio e fim de um processo de simulação e depois um componente ?fileUpload? também de primefaces que vai carregar os valores da simulação desde um arquivo de excel.
Quando o usuário clica no fileUpload o ManageBean verifica as datas de inicio e fim, assim como os outros valores do cadastro e somente continua a execução caso todos os valores estejam preenchidos, entre eles data de inicio e fim. As datas de inicio e fim devem ser mensais. Por isso uso o componente inputMask para definir a máscara: 99/9999.
Quando o usuário preenche: 10/2012, eu quero que dispare um evento change para salvar essa data como 01/10/2012
Tenho feito varias tentativas com valueChangeListener, f:ajax, p:ajax sem sucesso. Seguem os trechos de código:
<p:inputMask mask="99/9999" value="#{simulacaoBean.dataInicio}">
<f:convertDateTime pattern="MM/yyyy"/>
</p:inputMask>
No Magebean:
public void setaDataInicioSimulacao( ValueChangeEvent vce ){
System.out.println(vce);
}
Alguma dica para resolver este probleminha?? Desde já obrigado!!!
Estou usando PrimeFaces 2.2.1, Tomcat 7, JSF 2.1.2, Eclipse Indigo R2.
Carlos
Não entendi muito bem, você vai mostrar a data pro usuário ou o programa salvará automaticamente com esse mês de diferença?
Oi Andre, obrigado por responder.
Eh um formulario de cadastro de dados pra simulacao. Eu preciso cadastrar a data de inicio e fim do dados da simulacao. Os dados da simulacao estao contidos numa planilha de excel de “n” colunas x 2001 filas (exemplo). As colunas contem na primeira fila uma data que corresponde ao mes da simulacao
01/01/2012 01/02/2012 01/03/2012 01/04/2012 01/05/2012 01/06/2012 01/07/2012 .... 01/011/2013 01/12/2013
A partir da segunda fila contem 2000 valores para cada coluna, que correspondem aos valores de simulacao de cada mes.
O cadastro eh composto eh feito da seguinte forma:
<h:outputLabel value="Nome" />
<h:inputText id="txtNome" value="#{simulacaoBean.novaSimulacao.nome}"/>
<h:outputLabel value="Intervalo" />
<h:selectOneMenu id="cboIntervalos" value="#{simulacaoBean.novaSimulacao.intervalo}">
<f:ajax execute="@this" render="panelIntervalos" />
<f:selectItems value="#{simulacaoBean.listaTiposIntervalo}" />
</h:selectOneMenu>
<h:panelGroup id="panelIntervalos">
<p:outputPanel id="panelIntervaloMensalEdicao" rendered="#{simulacaoBean.novaSimulacao.intervalo.toBaseString() == 'MENSAL'}">
<h:outputLabel value="Início"/>
<p:inputMask id="txtDataInicioMensal" mask="99/9999" value="#{simulacaoBean.novaSimulacao.dataInicioDate}">
<f:convertDateTime pattern="MM/yyyy" timeZone="America/Sao_Paulo" />
</p:inputMask>
<h:outputLabel value="Fim" />
<p:inputMask id="txtDataFimMensal" mask="99/9999" value="#{simulacaoBean.novaSimulacao.dataFimDate}">
<f:convertDateTime pattern="MM/yyyy" timeZone="America/Sao_Paulo" />
</p:inputMask>
</p:outputPanel>
<p:outputPanel id="panelIntervaloAnualEdicao" rendered="#{simulacaoBean.novaSimulacao.intervalo.toBaseString() == 'ANUAL'}">
<h:outputLabel value="Início"/>
<h:inputText id="txtDataInicioAnual" maxlength="4" value="#{simulacaoBean.novaSimulacao.dataInicioDate}">
<f:convertDateTime pattern="yyyy" timeZone="America/Sao_Paulo" />
</h:inputText>
<h:outputLabel value="Fim" />
<h:inputText id="txtDataFimAnual" maxlength="4" value="#{simulacaoBean.novaSimulacao.dataFimDate}">
<f:convertDateTime pattern="yyyy" timeZone="America/Sao_Paulo" />
</h:inputText>
</p:outputPanel>
</h:panelGroup>
<h:outputLabel value="Número de Simulações" />
<h:inputText id="txtNumeroSimulacoes" value="#{simulacaoBean.numeroSimulacoes}">
<f:ajax event="change"/>
</h:inputText>
<h:outputLabel value="Arquivo"/>
<p:fileUpload id="cmdImportarDados" label="Importar dados" auto="true" fileUploadListener="#{simulacaoBean.carregaArquivo}" />
<h:commandButton id="cmdGrabar" value="Grabar Simulação" action="#{simulacaoBean.gravaSimulacao}">
<f:ajax render="@form" update="msgSimulacao"/>
</h:commandButton>
<h:commandLink id="lnkCancelar" value="cancelar" action="#{simulacaoBean.cancelaEdicao}">
<f:ajax render="@form"/>
</h:commandLink>
Uma vez que o usuario clica no fileUpload para “Importar dados” o Bean vai validar se as datas de inicio e fim já foram preenchidas e posteriormente validar se os dados se encontram no arquivo e o número de colunas que devem ser importadas é valido no arquivo.
Para isso preciso que as datas de inicio ja tenham sido capturadas pelo simulacaoBean.novaSimulacao.dataInicioDate. Tentei fazer isso disparando o evento change com valueChangeListener, p:ajax, f:ajax, mas nao tive sucesso.
Estou usando PrimeFaces 2.2.1, Tomcat 7, JSF 2.1.2, Eclipse Indigo R2.
Bom, espero que tenha ficado mais clara minha ideia e possa me dar um help.
Grato,
Carlos Ruesta